Version scheme

	for example, (in order from earliest to latest)
		0.1-rc1: 0.1 initial release candidate
		0.1: release 0.1 initial release
		0.1.1: release 0.1, 1st bugfix release
		0.1.10: release 0.1, 10th bugfix release
	* Once a release has gone through about 8 cycles of bugfixes, and/or the number and severity of bugs has
	  declined to a very low point, it is considered "stable".

API/ABI stability

	* For performance reasons, only API compability will be maintained. Expect ABI breakages even between
	  different bugfix releases of the same branch.
	* API compatibility is maintained between different bugfix releases of the same branch (major and minor
	  number) for all non-rc releases.

Release overview

	latest release: 1.0
	latest stable release: 0.2.5
	"maintained" means API is to be kept unchanged in future releases of that branch

		* current status: released/testing
		* current status: renamed to 1.0
		* current status: stable; maintained
		* current status: deprecated


1.0: (based on 52484d590073ed368d26cf8b9ecc9a0cbca304ef)
	1.0: (2014/01/02) - 52484d590073ed368d26cf8b9ecc9a0cbca304ef
		* fixed an XSS vulnerability in the default error handler page
		* misc minor bugfixes


0.3: (based on 05eb2d693ab2e065fd00412df23d879a79cad292)
	notable changes included so far (from 0.2):
		* mime database configuration is now automatic
		* allow temporary and persistent binaries to be stored in a separate directory (-b cmdline flag)
		* [API change] signature of initModule() has been changed; look at the example modules for documentation
		* [API change] the "public" specifier now needs to be explicitly specified in the "inherits" page option (if one is present)
		* [API change] request router re-work;
			* the signature of Page::loadNestedPage() and Server::load[Page|Module][FromFile]() has changed
			* routing decisions can be cached; the directory listing support module no longer adds noticible overhead
		* chunked transfer encoding & early flush support
		* custom error handler support
		* automatic cache cleanup
		* the housekeeping timer is now automatically disabled when not needed, saving power on embedded/mobile devices
		* ARM is now fully supported
		* sendfile(2) support
		* static files larger than 2GB are now supported
		* SSI (server side include) support
		* websocket support included by default. You'll need crypto++ installed.
	0.3-rc5: (2013/10/06) - f0370fb65fde15cbdf4f3ea6f87204df7cc7464e
		* cpoll bugfixes
		* ipv6 support
	0.3-rc4: (2013/09/03) - 5c5d37a09cce5031fc25cb9058cacea6dd696025
		* sync to top of master branch (many bugfixes)
		* websocket support can now be disabled by running ./configure --disable-websocket
	0.3-rc3: (2013/09/02) - 1f4a7d942ae93a45f0138be2727faa23f04cf3ea
		* sync to top of master branch
	0.3-rc2: (2013/08/10) - 1b12721001f8db118267a3c32be61bcc28a9dd44
		* cppsp: return http code 404 instead of 500 when accessing a nonexistent file (1b12721001f8db118267a3c32be61bcc28a9dd44)
		* cppsp: fix typo in commit 363a8caa48f92bcf05a2c8fb4fa6ff89832f480a (10cf788b07ccefcb8d4b726ce96f66b028cbbe8b)
		* cppsp: hold reference to staticPage when doing sendfile() (4e3391acbc3a2905317a516f01d868d9c579c7f5)
		* cppsp: sendfile support (11ffb4c9a36b5e1d014c57bab2c724bd5d41222b)
		* cppsp: perform urlDecode() on request path (1c4cc8aee9ac1ef255f878f17a05556cb6c8c4eb)
		* cppsp: hold reference to loadedPage whenever Page instances of them exist (8c2f30948757aa96a80bf6623aed7350c8716254)
		* showcache.cppsp: allow clearing caches (ae539768df350850466fdefa69e37569165cf9ae)
		* cppsp: minor internal api changes (05f6063a26d8d558a43acf473723e55593c32aae)
		* cpoll: sendfile(2) suppport (b07423c4a30f82ed900e84227f572989c8a26d78)
	0.3-rc1: (2013/07/23) - 05eb2d693ab2e065fd00412df23d879a79cad292
		* initial release candidate


0.2: (based on cad1a3c8cb8887472c88b93e70ad4eeacf011a81)
	notable changes included so far (from 0.1):
		* socketd is now included
		* static file serving is now supported
		* added module support; removed "default handler" (superseded by loading a module which does url rewriting)
		* many optimizations
		* SO_REUSEPORT support (requires kernel 3.9 or above)
		* thread pool implementation (in cpoll)
		* compilation no longer needs to be repeated for every worker thread
	rel0.2.5: (2013/09/01)
		* cpoll bugfixes (ffed5d7cf3361f70b04257281cca5eb97f118bd7, 689d0eba3eaaf6bade8f79004975f1af381be8b0, 70ab80b97e356d0d0bc028bab8774349a2e326e8)
		* added run_cppsp and cppsp_clean scripts (a6e1707bbac1ebd52e69e71f2009d9e1157ec9d0)
		* fixed memory leak in DelegateChain destructor (cf3cf1f3c90c23e0011db9061dabdf39df1b6401)
		* cppsp: show working directory of compiler in compilation error output (8c43f21dca3e42cabd6b209190b5c3f7132c9381)
	rel0.2.4: (2013/08/10)
		* cpoll: NewEPoll: set nonblocking flag on files in add() (519c47e0d2643371175d857906e96cfb9eda5d5b)
		* cppsp: perform urlDecode() on request path (1321fdf877c6bcf6c2223906b926397f10b4dd75)
		* cpoll: StringPool: fix minor bug; skip alignment on x86 (7222c6fa8a03040737f380511714da82cc8454d1)
		* cpoll: StringPool: align allocations (05c51a8aabeaa5e97bf6d57b19f20c2ff8568b83)
	rel0.2.3: (2013/07/23)
		* added "date" HTTP response header (as required by http spec)
	rel0.2.2: (2013/07/08)
		* switched to NewEPoll for default Poll type because it performed better in many benchmarks
		* fixed read/writev stall in NewEPoll (bad5745192ee7d5d347e1fa99ffebd7286d2292f)
	rel0.2.1: (2013/06/03)
		* expose internal API; check for file existence before allocating data structures to avoid DoS (261486b40386417b2175d47da3220897ef498d01)
		* API additions (ad0eacf49a7557acdeebe2fb4502b6fbdca067ef)
		* revert back to EPoll class for default Poll type
		* added automatic cpu affinity configuration (c12ed66e2873f88fe396c0498213b75bf1bafe1a)
		* cpoll API additions (String::indexOf, etc) (e1fb9288e43293bd2d32b091996cadf8fee3f095)
		* completed websocket support (b679ce12a898b68f8ebfa398be3bf268465425cf)
		* minor bugfix (442a75159185b4284b753eeaca6f7aa143dd0b05)
		* fixed infinite recursion (6f5f33cc39f87e8b5fdbb07c080e839f8ba66399)
	rel0.2: (2013/05/24)
		* sync to tip of git repo (c70bb26a56a3da589a5ce099f1861b0113b734f7)
	0.2-rc9: (2013/05/20)
		* 0a74c054fb8940f78515e83a454387fac8645856
		* 376c9208adbc4de08d6a43402c157b76606e3cd0
		* 17c7892d98c79f22c5358abe8f59cb29aa7d5648
	0.2-rc8: (2013/05/19)
		* ea4f175a2ad6aa0784b80664258496b670bfbb3e
		* a368b2e786fe9813aa420b76813fdd6c8db96c76
		* 4a340d50b7e7428efca5a7397ec142a02cf45d9a
		* eeb74f8d4c148dbf6b54d0936798c28c5de643a6
		* 1cf4c149832a3132fb6d912341576ba54d11064d
		* 5f6407cddbe05c52e547bcca81edfff91e1435ed
	0.2-rc7: (2013/05/17)
		* 1ec535514582fe8a414b87e233a9d445d39588a0
		* 809f759e331555ecaa0a2248fd700858ac014532
		* ad3dbc0eb3b244fd43dfbcadf9d58f6735d9e457
		* 2d6dbb01581d4f87e1c76064012919f78b6de486
		* 123746212b2bf85182a45862035c7ae203e1b59c
	0.2-rc6: (2013/05/15)
		* 9b0539776d955fad26b377a9628f38f052d0468d
		* 3276e2abaecc07f258425110ec707a97e724914d
		* 537e679d2f905d872f19d67ef9fbf6a485b21fb5
	0.2-rc5: (2013/05/15)
		* e7fafaa82e767b806edd8373f9abcee6649a1c76
		* eb2e4e85f278b0b1c3a8ea7421dfd7fb361ce4cd
		* f3e92cacb6174d8b94357ec6d774cea7e3657d69
		* 349a1a26ebd799a333e4f3ec770f214ad1382ddc
		* f87625e51889c374b44892620169bc9ec9c4959b
		* e23e0e3b032ba53467917f9d401913d400e649c1
		* ca43ab7cfd2ed9b55ed2fb51bd2d8b6fa55bdcf7
		* 06f0a4c2f8891e204f477f2cb72ea0f98d008648
		* 0df5947f2372214b322c884a36be70c73a8343b9
	0.2-rc4: (2013/05/14)
		* fe021cd5ca8e27a51c0e9bea4e8ad2395f5aeab7
	0.2-rc3: (2013/05/12)
		* f3abae8dd1e68d46028ba5237d8932624f88aefc
		* 519e710d082a1a03fd4b9609cd4fb4879240dcca
	0.2-rc2: (2013/05/11)
		* 26e3705016e16c6e22d5a694a59fa0281abcdc77
		* 579e5f4cd09b3a620922152c894b02e4bba62fab
	0.2-rc1: (2013/05/11)
		* initial release candidate


0.1: (based on cb4a9afe1108698fe8e83370ed07ecce2b1777ba)
	stab0.1.12: (2013/05/28)
		* fixed segfault in case of 0 length http response (119146a0efb61444f7596c7fea034448b98dae4f)
		* stringutils: make api consistent (72ea24f04f0cf399ca03403309192d5872b264c0)
		* rgc.H: added DefaultAllocator (cd2f612ad4e51ad56ec9c289be32f9447f514371)
		* cpoll: String: added constructor for nullptr_t (7305a5384dc5940eefa3b6e1455af69db0d37346)
		* cpoll: String: added constructors for std::string and MemoryBuffer (b90f24612a82a4083e73f1b66e71657720e58354)
		* html escape error messages (1a71b2dee4bfc532c75f2dbbad3cd62b39a3078e)
	stab0.1.11: (2013/05/18)
		* cpoll bugfix (a368b2e786fe9813aa420b76813fdd6c8db96c76)
	stab0.1.10: (2013/05/15)
		* cpoll bugfixes (eb2e4e85f278b0b1c3a8ea7421dfd7fb361ce4cd, 349a1a26ebd799a333e4f3ec770f214ad1382ddc, f87625e51889c374b44892620169bc9ec9c4959b)
	stab0.1.9: (2013/05/14)
		* fixed a bug where parsing of large pages may fail (fe021cd5ca8e27a51c0e9bea4e8ad2395f5aeab7)
	stab0.1.8: (2013/05/10)
		* fixed a potential bug where different processes could overwrite the same compiled page in forking mode due to an unseeded random number generator (af53b14ddd5702739f51d38cd0a6cda635e4f0e1)
	rel0.1.7: (2013/05/09)
		* fixed bug causing http status code to be retained between requests when keepalive is enabled (5107d2b0b34f9d9e13127ecbe2e9f1a1af2bd739)
	rel0.1.6: (2013/05/07)
		* fixed bug where page would be stuck in the "compiling" state if compilePage() throws an exception or returns NULL (f00cf833110fa94a3f15f36e8d4f2fa6141f1bc7)
		* minor API fixes (016bd15e45e61c300776b2a589ab3d9cb3801ea4, 91171d621626a61951677fd231ec01d0243bafc0)
		* change http status to 500 when errors are encountered (7b7821422c123ec59edd064403ad52a4fe2b2399)
		* display correct line numbers, and keep generated c++ file in case of compilation error (8d2c9e64a69d489f4f846f2b5733174a5834ebcc, 91f6288590176280aeff0a6d8cab2ed4b1934328)
		* minor fixes in page loader (3ae2b37b48714d128c376b9cb681ce8cfda33e23)
		* querystring parsing performance improvements (8baae074bc043ecc2f84ea97609b192b2bd16759, 06a7a21d2ea453f3b95d3523058bbf910c43d59a)
		* fixed Segmentation Fault on invalid command line argument (e3e3baab6414b4d199be4095d3031c61247e7c2f)
	rel0.1.5: (2013/05/07)
		* added multi-processing (forking) mode (not enabled by default); this offers a small but noticible performance gain. (27142a3d2e9f2219288a58459cf68a2f714efe7a, dda077453c0fa3666a77ff364a42387a588721d8)
		* fixed possible Segmentation Fault when re-compiling pages during heavy traffic (0e91da1922d8cf7dbf2246eca6fd9bfe8206314b, cfcab1f1625cb558d6d3183c90fc32550aa303f4)
		* fixed erroneous "compilation error" due to a race condition (eb7312f1a392ee976e323648edc513dbf8ef3468)
	rel0.1.4: (2013/05/05)
		* avoid unnecessary buffer allocation (178b8afe18a5c9c27db8f9253414dcad4d68b857)
		* added GPLv3 license header to all cppsp, cpoll, and socketd files (1b44d78fa788fa19567c1d9a88f23ac8839c7250)
		* optimizations (badf1772603af7df2db4a44f13c8fd9621124398, 747b2b7e99d9e3c2a17725b6893f2d10111cb382, 0eee693b27abd4cd78771c1a5276615aa052b290, c37fb0e626651755302fb83fe7f5c035658a845f, 9db1ea82aa165e0c71b72f92c3ae3c96a89698df)
		* minor API clean-ups (b2030fc30c47f8f6552332511a003d0f474d15bc)
		* fix non-keepalive handling (463c8722961f10e69582e5a99639a206d2ea3b0d)
		* fixed minor cpoll bug (ce70ee6c59093cc44e7bad673b04a68fc5ff3f40)
		* don't continue processing requests from a connection if the connection was detected to be closed (writev() returns -1) (ef19dd1582863c28a84982efb9f5fe4b598dc33a, 2a2e1a587b322e365cb114281cbb68b7d5e99887)
		* fixed bug when http request is cut off at end-of-buffer after the first line (c5514b0333020e1e01257505b76bb7a406edc106)
	rel0.1.3: (2013/05/04)
		* reduce memory bloat on keep-alive connections (20e174bcb3d4533b4b7d0f8a9b8c28902292f502)
	rel0.1.2: (2013/05/03)
		* fixed memory leak in StreamReader (bd4d951105e44d65564a45a0dd825c5d074d533c)
		* fixed memory leak in StringPool (eb1832044bed297d8d399a0af0f0ddd6473961ad)
		* fixed use-after-free segfault resulting from calling a stale callback (7c250d58666c3f27431fb67f406f304b172a19cd)
	rel0.1.1: (2013/05/02)
		* fixed bug in querystring parsing (44178f8456356520d7d8ca7f3931333bf3c8c199)
	rel0.1: (2013/05/01)
		initial release.