Changes in fplll-5.0:

- switched to C++11
- switched to more open development model on GitHub, cf. CONTRIBUTING.md
- support for computing optimal pruning parameters for a given lattice
  dimension/shape/radius
- BKZ 2.0: recursive BKZ preprocessing, extreme pruning, gaussian
  heuristic bound
- precomputed BKZ (2.0) reduction strategies up to block size 90, cf.
  https://github.com/fplll/strategizer
- Self-Dual BKZ and Slide reduction
- faster, recursive enumeration implementation
- Gaussian lattice sieving
- Python interface at https://github.com/fplll/fpylll
- optional dumping Gram-Schmidt vectors during execution of algorithm
- q-ary lattice generator
- instructions on how to cite
- optional support for doubledouble and quaddouble
- pkg-config support
- API documentation at https://fplll.github.io/fplll/
- revised build system supporting parallel build
- copyright headers
- dropped fplllv3 compatibility layer
- greatly increased test coverage, tests are run on every commit or
  pull request
- coding/naming convention
- FP API improved to allow for more readable/natural code


Changes in fplll-4.0.4:
- compatibility for packages that still expect to build against 
libfplll version 3.
- updates of config.sub and config.guess 
- better check that MPFR and GMP are installed
- compilation issue with NaN's

Changes in fplll-4.0.3:
- Compiler issues with Cygwin

Changes in fplll-4.0.2:
- Changed formulation for the license, in README.html

Main changes in fplll-4.0.1:
- Compiler warnings about unused parameters fixed

Main changes in fplll-4.0.0:
- BKZ reduction, available with 'fplll -a bkz -b block_size'

*******************************************************************
Changes in fplll-3.1.3:
- Fixed build process when DESTDIR is defined

Changes in fplll-3.1.2:
- Memory leak fixed in the wrapper.

Main changes in fplll-3.1.1:
- Some code is no longer included in the header files but is compiled in
libfplll instead. The -lfplll option will now be required for apps which could
be compiled without it.
- 'make install' puts all header files but fplll.h in a subdirectory named fplll
- New programming interface for the library (documented in README.html).
- 'generate' renamed to 'latticegen'.
- Removal of fplll_verbose. Use the '-v' option instead.
- Minor bugs fixed in all versions of LLL.
- More important bugs fixed in the SVP solver.
- Optimization of the SVP solver.
- By default, 'fplll -a svp' now gives the coordinates of a shortest vector in
the _standard_ basis.

*******************************************************************

The main differences between fplll-2.1 and fplll-3.0 are the following:

- short lattice vector enumeration algorithm (by Xavier Pujol).
- GPL -> LGPLv2
- no more need to specify the number of rows and columns in the input
of the fplll binary.
- new version of dpe.h [Patrick Pelissier and Paul Zimmermann]
 
*******************************************************************

The main differences between fplll-2.1 and fplll-2.0 are the following:

- "configure/make/make install" packaging (thanks to Martin Albrecht)
- few minor changes to make fplll portable to SAGE (thanks to Martin 
Albrecht) 
- conversion scripts between MAGMA and fplll formats.
- a bug fixed in fast_early (discovered by Martin Albrecht)


*******************************************************************

fplll-2.0 is an improved version of fplll-1.3. Parts of it resemble
Magma's LLL (Allan Steel, Damien Stehle) and/or NTL's LLL (Victor
Shoup).

The improvements from fplll-1.3 to fplll-2.0 were mostly performed
by David Cade. Here is a brief summary of the changes:

- the major algorithmic improvement is the so-called wrapper, which
chooses for the user a guess of the right sequence of heuristic/proved
variants to use, in order to finish as quick as possible, but in a
reliable way.  

- the early-reduction strategy of Allan Steel has been integrated. It
consists in size-reducing vectors earlier than what would have been
done in the standard LLL. This is not integrated into the wrapper yet. 

- we switched from C to C++, to simplify our lives with the wrapper.
It is extremely convenient for the use of the underlying arrithmetics
(integers and floating-point numbers).

- we translated the matrix indices by 1: the first matrix entry is
B[0][0] instead of B[1][1].

- automatised triangular option: the code looks at the matrix and
decides how close to upper-triangular it is.
