Version 0.1.0 (2006-05-24):
  This version plays a legal game of chess. It supports all the special moves:
  en passant, castling, promotion/underpromotion. Most of the XBoard protocol
  is implemented, except for parts related to analysis and ICS. It uses a two-
  dimensional array for board representation and NegaScout as a searching
  algorithm. All evaluations are only done at the end-points.

Version 0.2.0 (2006-05-29):
  The relevant parts have been rewritten to use rotated bitboards. Captures
  and non-captures are now generated separately. Move ordering heuristic is
  MVV/LVA.

Version 0.3.0 (2006-06-05):
  Added capture-based quiescence search. Stalemate during search is now also
  recognized. Incorporated ICS support: both in XBoard protocol and blogging
  of game results. Time manager now takes into account the phase of the game.

Version 0.3.1 (2006-06-15):
  Rewrote FirstBitNumber() and LastBitNumber() in Assembly for a 25% speed
  increase. Alleviated issues with overly tight time management limits.

Version 0.4.0 (2006-06-26):
  Added support for SAN, PGN, and FEN. This allowed to create an opening book
  from a PGN database file with games in reduced export format. XBoard's "bk"
  and "setboard FEN" commands are now available. Games are automatically saved
  in PGN and FEN (final position). Various changes throughout the code.

Version 0.5.0 (2006-07-17):
  Implemented hash tables. Currently two hash tables are used with different
  replacement schemes. Time management is now based on iterative deepening and
  takes the time control into account. Thinking output is available, as well
  as the "hint" command. Added draw detection (threefold repetition, the fifty
  move rule, insufficient material). Changed mate and stalemate detection.

Version 0.6.0 (2006-07-26):
  We now poll for input during search (and check for the amount of time left).
  Consequently, "?" and "pause"/"resume" are now available. We can now ponder
  and analyze, although the only side effect of pondering is that it fills the
  hash tables with (hopefully) useful data.

Version 0.7.0 (2006-07-29):
  Added null-move (with adaptive null-move depth reduction), futility pruning,
  extended futility pruning, and razoring. Replaced NegaScout with principal
  variation search. Corrected the hash table probing routines to return the
  hash table move regardless of the depth. If no hash table move is present,
  we try internal iterative deepening to obtain one. Also, quiescence search
  now also uses a hash table. Changed move generator so that moves forward of
  a given piece are generated first. Material is now updated incrementally.
  All of these modifications gave the engine an extra one and a half ply.

Version 0.8.0 (2006-08-05):
  Added check, recapture, and pawn push search extensions. Evaluation function
  became more sophisticated and takes king safety, pawn structure, and bishop
  pairs into consideration. Piece-square values are updated incrementally. If
  required, the engine can resign if it is down materially by a large amount
  and sees no way of recovering it for several moves. Its opponent should not
  be under time pressure.

Version 0.8.1 (2006-08-17):
  The engine is now able to slightly vary its play. Since the previous scheme
  of handling mate scores resulted in incorrect mate scores and allowed draws
  by repetition in won positions (because of hash tables), it was changed to
  use the bounding scheme described by Bruce Moreland. Corrected futility
  pruning (and others) to return "eval" instead of a value based on "beta",
  because the latter would sometimes be a mate score, and this is wrong. En
  passant availability keys are now only xor'ed in when en passant capture is
  indeed possible.

Version 0.8.2 (2006-08-21):
  Rewrote PopCount() in Assembly. Switched from NASM (Intel) to GAS (AT&T).

Version 1.0.0 (2006-08-24):
  Ported the engine to Windows. Added a set of command-line options. Various
  corrections. This is the first public version.

Version 1.0.1 (2006-08-28):
  Corrected the code that gathers PGN information, so that when saving games
  unknown PGN tag values would be handled according to the PGN standard ("?").

Version 1.0.2 (2006-09-01):
  Fixed a bug where futility pruning would be tried when it is actually time
  for quiescence search. Changed futility pruning et al so that if our static
  score does not allow us to return "eval" right away, but still sufficiently
  exceeds "beta" by some other margin, we would reduce our search depth by one
  ply. Null-move, futility pruning and others are not tried if at least one of
  "alpha" and "beta" is a mate score. With the way our iterative deepening is
  implemented, we couldn't do aspiration search in what seems to be a classic
  way of doing it. Instead, only the best move of the previous iteration is
  wrapped in aspiration windows. This helped reduce the search tree size by
  one third.
