packages feed

Ketchup 0.4.1 → 0.4.2

raw patch · 370 files changed

+73/−2225 lines, 370 filesbinary-added

Files

− .git/COMMIT_EDITMSG
@@ -1,1 +0,0 @@-Fix URL parsing to work with empty sections
.git/FETCH_HEAD view
@@ -1,2 +1,2 @@-85b4c8d2256c11c570cacf64895353c0b9bd374f		branch 'master' of github.com:Hamcha/ketchup-4c2353910734c89633d869f0ffccf8f565c93221	not-for-merge	branch 'gh-pages' of github.com:Hamcha/ketchup+26aa433ce02a16e4f0887189d56ca66cc0fab283		branch 'master' of github.com:hamcha/ketchup+4c2353910734c89633d869f0ffccf8f565c93221	not-for-merge	branch 'gh-pages' of github.com:hamcha/ketchup
.git/ORIG_HEAD view
@@ -1,1 +1,1 @@-2382296bb15427910f85a9a4a5be39677a6d9005+fcf776ea249603cba21a7e735ac877482693b3e1
.git/config view
@@ -4,7 +4,7 @@ 	bare = false 	logallrefupdates = true [remote "origin"]-	url = git@github.com:Hamcha/ketchup.git+	url = git@github.com:hamcha/ketchup.git 	fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] 	remote = origin
.git/hooks/pre-push.sample view
@@ -45,7 +45,7 @@ 		commit=`git rev-list -n 1 --grep '^WIP' "$range"` 		if [ -n "$commit" ] 		then-			echo "Found WIP commit in $local_ref, not pushing"+			echo >&2 "Found WIP commit in $local_ref, not pushing" 			exit 1 		fi 	fi
.git/index view

binary file changed (1136 → 1136 bytes)

.git/logs/HEAD view
@@ -1,39 +1,2 @@-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868061 +0200	commit (initial): Base commit (most code from httpd)-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 b197449e22aa6e00dcbb765294c13b957ad35207 Hamcha <zikyky@gmail.com> 1400868225 +0200	commit: Took some useless stuff out-b197449e22aa6e00dcbb765294c13b957ad35207 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868258 +0200	commit: .gitignore to avoid commiting binaries or object files-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871180 +0200	commit: Basic routing should work-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871591 +0200	commit: Added types-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872235 +0200	commit: Replaced incorrect 400 errors with 404 ones-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884141 +0200	commit: Removed some oleg sauce-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935032 +0200	commit: Hackage stuff-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936077 +0200	commit: README-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953254 +0200	commit: Chunked encoding-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953623 +0200	commit: Forgot to make it visible-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960297 +0200	commit: Removed SERVER header and set to 0.1.1-2e95147d7a2c86bb224527a5624c118b53f9c736 718178fa1b3fc34b7d7d961792c09b4b7b531b3e Hamcha <zikyky@gmail.com> 1401303609 +0200	pull: Fast-forward-718178fa1b3fc34b7d7d961792c09b4b7b531b3e b473be4e130f0ee35eb42d4037b2c99ee5003326 Hamcha <zikyky@gmail.com> 1401319907 +0200	commit: Ketchup has been Haddock'ed-b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541834 +0200	commit: Switch to PCRE regexps-c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: Fast-forward-a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149852 +0200	commit: 0.2.2 - POST DATA-a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151933 +0200	commit: Prettier docs-464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152719 +0200	commit: Tree shaking depenencies-a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152846 +0200	commit: Updated readme-0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175260 +0200	commit: Static doesn't depend on Routing anymore-b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296411 +0200	commit: Fixed chunked encoding not working-4ad51f9dc87b6aa48cb614030521d957b8498622 f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 Hamcha <zikyky@gmail.com> 1404003509 +0200	commit: Version bump + GenDoc script-f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 139041d9f25f891c340cc0b858838f94306c9b93 Hamcha <zikyky@gmail.com> 1404078079 +0200	commit: So long Data.Map (and "containers" dependency)-139041d9f25f891c340cc0b858838f94306c9b93 0f03ed98a2eba1beb8db11eb86edb34b2321a261 Hamcha <zikyky@gmail.com> 1404079631 +0200	commit: Basic auth is in!-0f03ed98a2eba1beb8db11eb86edb34b2321a261 0fd36c65d057f7ce244a4e9a335d698f075530e6 Hamcha <zikyky@gmail.com> 1404079677 +0200	commit: Version bump-0fd36c65d057f7ce244a4e9a335d698f075530e6 694dea2e0fc5c15b1ef710cee6f953b1afb623bd Hamcha <zikyky@gmail.com> 1404079963 +0200	commit: Promote Auth :D-694dea2e0fc5c15b1ef710cee6f953b1afb623bd 695dee0b1313795711418347aedd65f5bcbca02f Hamcha <zikyky@gmail.com> 1407086956 +0200	commit: Version bump for cabal-695dee0b1313795711418347aedd65f5bcbca02f 83ac9915be5493cf66f1f96de88b5edce6c39929 Hamcha <zikyky@gmail.com> 1407714950 +0200	commit: Doesn't work, but it's a start, will work on it tomorrow-83ac9915be5493cf66f1f96de88b5edce6c39929 85b4c8d2256c11c570cacf64895353c0b9bd374f Hamcha <zikyky@gmail.com> 1407715002 +0200	commit: Remove unneded comments-85b4c8d2256c11c570cacf64895353c0b9bd374f 9c007b2a800ccd64ea6589e3aaf436dd386c5879 Hamcha <zikyky@gmail.com> 1411050080 +0200	commit: Routing rewritten, now Regexp(tm) free-9c007b2a800ccd64ea6589e3aaf436dd386c5879 c91a524dd7612f6b6b1a10132e0315ee38c4e7ac Hamcha <zikyky@gmail.com> 1411050528 +0200	commit: Take "Regexp" out of docs-c91a524dd7612f6b6b1a10132e0315ee38c4e7ac 2382296bb15427910f85a9a4a5be39677a6d9005 Hamcha <zikyky@gmail.com> 1411050630 +0200	commit: Ehm-2382296bb15427910f85a9a4a5be39677a6d9005 2382296bb15427910f85a9a4a5be39677a6d9005 Hamcha <zikyky@gmail.com> 1411050635 +0200	rebase -i (start): checkout refs/remotes/origin/master-2382296bb15427910f85a9a4a5be39677a6d9005 2382296bb15427910f85a9a4a5be39677a6d9005 Hamcha <zikyky@gmail.com> 1411050635 +0200	rebase -i (finish): returning to refs/heads/master-2382296bb15427910f85a9a4a5be39677a6d9005 c91a524dd7612f6b6b1a10132e0315ee38c4e7ac Hamcha <zikyky@gmail.com> 1411050647 +0200	rebase -i (start): checkout HEAD~2-c91a524dd7612f6b6b1a10132e0315ee38c4e7ac 2ba3de09ad5a0b0b58d543705380a9a44a31ae2b Hamcha <zikyky@gmail.com> 1411050648 +0200	rebase -i (squash): Take "Regexp" out of docs-2ba3de09ad5a0b0b58d543705380a9a44a31ae2b 2ba3de09ad5a0b0b58d543705380a9a44a31ae2b Hamcha <zikyky@gmail.com> 1411050651 +0200	rebase -i (finish): returning to refs/heads/master-2ba3de09ad5a0b0b58d543705380a9a44a31ae2b cec17859d0a08acd01b9297297b32881bc4f7104 Hamcha <zikyky@gmail.com> 1411488463 +0200	commit: Fix URL parsing to work with empty sections+0000000000000000000000000000000000000000 fcf776ea249603cba21a7e735ac877482693b3e1 Hamcha <zikyky@gmail.com> 1424005085 +0100	clone: from git@github.com:hamcha/ketchup.git+fcf776ea249603cba21a7e735ac877482693b3e1 26aa433ce02a16e4f0887189d56ca66cc0fab283 Hamcha <zikyky@gmail.com> 1424005457 +0100	pull: Fast-forward
.git/logs/refs/heads/master view
@@ -1,35 +1,2 @@-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868061 +0200	commit (initial): Base commit (most code from httpd)-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 b197449e22aa6e00dcbb765294c13b957ad35207 Hamcha <zikyky@gmail.com> 1400868225 +0200	commit: Took some useless stuff out-b197449e22aa6e00dcbb765294c13b957ad35207 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868258 +0200	commit: .gitignore to avoid commiting binaries or object files-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871180 +0200	commit: Basic routing should work-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871591 +0200	commit: Added types-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872235 +0200	commit: Replaced incorrect 400 errors with 404 ones-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884141 +0200	commit: Removed some oleg sauce-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935032 +0200	commit: Hackage stuff-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936077 +0200	commit: README-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953254 +0200	commit: Chunked encoding-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953623 +0200	commit: Forgot to make it visible-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960297 +0200	commit: Removed SERVER header and set to 0.1.1-2e95147d7a2c86bb224527a5624c118b53f9c736 718178fa1b3fc34b7d7d961792c09b4b7b531b3e Hamcha <zikyky@gmail.com> 1401303609 +0200	pull: Fast-forward-718178fa1b3fc34b7d7d961792c09b4b7b531b3e b473be4e130f0ee35eb42d4037b2c99ee5003326 Hamcha <zikyky@gmail.com> 1401319907 +0200	commit: Ketchup has been Haddock'ed-b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541834 +0200	commit: Switch to PCRE regexps-c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: Fast-forward-a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149852 +0200	commit: 0.2.2 - POST DATA-a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151933 +0200	commit: Prettier docs-464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152719 +0200	commit: Tree shaking depenencies-a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152846 +0200	commit: Updated readme-0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175260 +0200	commit: Static doesn't depend on Routing anymore-b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296411 +0200	commit: Fixed chunked encoding not working-4ad51f9dc87b6aa48cb614030521d957b8498622 f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 Hamcha <zikyky@gmail.com> 1404003509 +0200	commit: Version bump + GenDoc script-f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 139041d9f25f891c340cc0b858838f94306c9b93 Hamcha <zikyky@gmail.com> 1404078079 +0200	commit: So long Data.Map (and "containers" dependency)-139041d9f25f891c340cc0b858838f94306c9b93 0f03ed98a2eba1beb8db11eb86edb34b2321a261 Hamcha <zikyky@gmail.com> 1404079631 +0200	commit: Basic auth is in!-0f03ed98a2eba1beb8db11eb86edb34b2321a261 0fd36c65d057f7ce244a4e9a335d698f075530e6 Hamcha <zikyky@gmail.com> 1404079677 +0200	commit: Version bump-0fd36c65d057f7ce244a4e9a335d698f075530e6 694dea2e0fc5c15b1ef710cee6f953b1afb623bd Hamcha <zikyky@gmail.com> 1404079963 +0200	commit: Promote Auth :D-694dea2e0fc5c15b1ef710cee6f953b1afb623bd 695dee0b1313795711418347aedd65f5bcbca02f Hamcha <zikyky@gmail.com> 1407086956 +0200	commit: Version bump for cabal-695dee0b1313795711418347aedd65f5bcbca02f 83ac9915be5493cf66f1f96de88b5edce6c39929 Hamcha <zikyky@gmail.com> 1407714950 +0200	commit: Doesn't work, but it's a start, will work on it tomorrow-83ac9915be5493cf66f1f96de88b5edce6c39929 85b4c8d2256c11c570cacf64895353c0b9bd374f Hamcha <zikyky@gmail.com> 1407715002 +0200	commit: Remove unneded comments-85b4c8d2256c11c570cacf64895353c0b9bd374f 9c007b2a800ccd64ea6589e3aaf436dd386c5879 Hamcha <zikyky@gmail.com> 1411050080 +0200	commit: Routing rewritten, now Regexp(tm) free-9c007b2a800ccd64ea6589e3aaf436dd386c5879 c91a524dd7612f6b6b1a10132e0315ee38c4e7ac Hamcha <zikyky@gmail.com> 1411050528 +0200	commit: Take "Regexp" out of docs-c91a524dd7612f6b6b1a10132e0315ee38c4e7ac 2382296bb15427910f85a9a4a5be39677a6d9005 Hamcha <zikyky@gmail.com> 1411050630 +0200	commit: Ehm-2382296bb15427910f85a9a4a5be39677a6d9005 2ba3de09ad5a0b0b58d543705380a9a44a31ae2b Hamcha <zikyky@gmail.com> 1411050651 +0200	rebase -i (finish): refs/heads/master onto c91a524dd7612f6b6b1a10132e0315ee38c4e7ac-2ba3de09ad5a0b0b58d543705380a9a44a31ae2b cec17859d0a08acd01b9297297b32881bc4f7104 Hamcha <zikyky@gmail.com> 1411488463 +0200	commit: Fix URL parsing to work with empty sections+0000000000000000000000000000000000000000 fcf776ea249603cba21a7e735ac877482693b3e1 Hamcha <zikyky@gmail.com> 1424005085 +0100	clone: from git@github.com:hamcha/ketchup.git+fcf776ea249603cba21a7e735ac877482693b3e1 26aa433ce02a16e4f0887189d56ca66cc0fab283 Hamcha <zikyky@gmail.com> 1424005457 +0100	pull: Fast-forward
+ .git/logs/refs/remotes/origin/HEAD view
@@ -0,0 +1,1 @@+0000000000000000000000000000000000000000 fcf776ea249603cba21a7e735ac877482693b3e1 Hamcha <zikyky@gmail.com> 1424005085 +0100	clone: from git@github.com:hamcha/ketchup.git
− .git/logs/refs/remotes/origin/gh-pages
@@ -1,2 +0,0 @@-0000000000000000000000000000000000000000 4ac44b6241517d43310da25b086e175b3b9c0b49 Hamcha <zikyky@gmail.com> 1402364070 +0200	pull: storing head-4ac44b6241517d43310da25b086e175b3b9c0b49 4c2353910734c89633d869f0ffccf8f565c93221 Hamcha <zikyky@gmail.com> 1411044679 +0200	pull: fast-forward
.git/logs/refs/remotes/origin/master view
@@ -1,31 +1,1 @@-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868072 +0200	update by push-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868261 +0200	update by push-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871184 +0200	update by push-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871595 +0200	update by push-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872238 +0200	update by push-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884145 +0200	update by push-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935037 +0200	update by push-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936080 +0200	update by push-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953258 +0200	update by push-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953627 +0200	update by push-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960301 +0200	update by push-2e95147d7a2c86bb224527a5624c118b53f9c736 718178fa1b3fc34b7d7d961792c09b4b7b531b3e Hamcha <zikyky@gmail.com> 1401303609 +0200	pull: fast-forward-718178fa1b3fc34b7d7d961792c09b4b7b531b3e b473be4e130f0ee35eb42d4037b2c99ee5003326 Hamcha <zikyky@gmail.com> 1401319911 +0200	update by push-b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541838 +0200	update by push-c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: fast-forward-a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149856 +0200	update by push-a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151936 +0200	update by push-464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152722 +0200	update by push-a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152850 +0200	update by push-0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175263 +0200	update by push-b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296415 +0200	update by push-4ad51f9dc87b6aa48cb614030521d957b8498622 f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 Hamcha <zikyky@gmail.com> 1404003524 +0200	update by push-f61d5b2caadecbdcf54d2d0ad7b131ca2adcdc28 0fd36c65d057f7ce244a4e9a335d698f075530e6 Hamcha <zikyky@gmail.com> 1404079685 +0200	update by push-0fd36c65d057f7ce244a4e9a335d698f075530e6 694dea2e0fc5c15b1ef710cee6f953b1afb623bd Hamcha <zikyky@gmail.com> 1404079969 +0200	update by push-694dea2e0fc5c15b1ef710cee6f953b1afb623bd 695dee0b1313795711418347aedd65f5bcbca02f Hamcha <zikyky@gmail.com> 1407086961 +0200	update by push-695dee0b1313795711418347aedd65f5bcbca02f 83ac9915be5493cf66f1f96de88b5edce6c39929 Hamcha <zikyky@gmail.com> 1407714965 +0200	update by push-83ac9915be5493cf66f1f96de88b5edce6c39929 85b4c8d2256c11c570cacf64895353c0b9bd374f Hamcha <zikyky@gmail.com> 1407715015 +0200	update by push-85b4c8d2256c11c570cacf64895353c0b9bd374f 9c007b2a800ccd64ea6589e3aaf436dd386c5879 Hamcha <zikyky@gmail.com> 1411050084 +0200	update by push-9c007b2a800ccd64ea6589e3aaf436dd386c5879 c91a524dd7612f6b6b1a10132e0315ee38c4e7ac Hamcha <zikyky@gmail.com> 1411050533 +0200	update by push-c91a524dd7612f6b6b1a10132e0315ee38c4e7ac 2ba3de09ad5a0b0b58d543705380a9a44a31ae2b Hamcha <zikyky@gmail.com> 1411050656 +0200	update by push-2ba3de09ad5a0b0b58d543705380a9a44a31ae2b cec17859d0a08acd01b9297297b32881bc4f7104 Hamcha <zikyky@gmail.com> 1411488467 +0200	update by push+fcf776ea249603cba21a7e735ac877482693b3e1 26aa433ce02a16e4f0887189d56ca66cc0fab283 Hamcha <zikyky@gmail.com> 1424005457 +0100	pull: fast-forward
− .git/objects/01/51025fe33749b1b065bfaaddeac482e2554582

binary file changed (282 → absent bytes)

− .git/objects/01/e3b6fea98c7d1cd0b8d7b76a5b558e82c6e182

binary file changed (587 → absent bytes)

− .git/objects/02/229886a2c1f7622014655936cde900885e9810

binary file changed (884 → absent bytes)

− .git/objects/02/ffa07f6990f74dafd8c9ce6d8fa39b0976d598

binary file changed (34 → absent bytes)

− .git/objects/04/27491eaa020186e459934ed69cdb7d808501cd
@@ -1,4 +0,0 @@-x”ßOÛ0Ç÷Ì_aü0à!ñJ…4ÖÄ+L Á@´Mˆ×1M¨k{±Óšö¿ïl(Ý&M}jz¾ûÜÝ×çI=B½ƒƒþ›lûørX|¿:A•›JtuûñülˆpBÈ×þãâ};-.ÎQ/}‡Š†)[»Z+&	9ù‚®œ3™Ïç鼟êfLŠk²ð¬žî>·™–®Ä4ùS©lþJïðð0{WÁJšM…cP¥3‰øÑÖ³µrB¹¤XÿrìÄÂO ^±Æ-—ߟ’÷š¹ÚIA3ÒýÊZMPՈ‡k.˜J¹µ5BæØº¥¶Âaä C!:Ǘ>$`-ojãm84ÃÊRóIÒºZ¦€[‰~d3}¡-¿hÖEÿϐlûnx|TÝmÍkUêyª•Ô¬D9zh÷÷v÷ÐOÃÆâì»{ƒ_ƒ-BîïéÖKUérI³²ž¡ºÌ±a|Q‰?
ÔÔJÄ%³p'^(>zËT¨dM3¸† #©—Óî2lFtæ½V=AdÕûÌG¾¸’VÒÌ<eæÌ„žÄÔ¸%¦oÕȚAFp¡î—⻇¢žÚ™ê²•"‘µu`]bzΡF`ù”¾Dk˜-]z\£eªÒLS!a¶¤dƂBH+.k>iÐã±7"è¿»Q;{˜~ŽW­ÙäôÚèõ-m+=ïô%¼ÊO"wÄä¨uU§ugJ½)г=Ëþ_ÀaÕª‰(טusì)¼Ðuh°m޼Öð–Ôx­Òκ9öÆ1Wó5j4n½…WoטÁö2}¸²øfûõ„?hí³4ôªÙå¢D£%zž•í[1;R†Üm ‚éiÜE>7š‰ÆúU±ŸöúéþÊ{"q'„Ióø
− .git/objects/04/a409a115341e8d88fbe81afe993e824ed5a755

binary file changed (874 → absent bytes)

− .git/objects/04/c3e16687ed10eefe4dc64aeebdfb04d44ca2ca

binary file changed (147 → absent bytes)

− .git/objects/06/19b7137861d0ac245cd24cdf1784b15b517ce1

binary file changed (488 → absent bytes)

− .git/objects/0b/1732fd47a5b9008302f3cf2cc815b4c3fcbb03

binary file changed (321 → absent bytes)

− .git/objects/0c/06892b80ad9e05a48ed2f816c1bc9ef49ca69a

binary file changed (178 → absent bytes)

− .git/objects/0e/1f7af50ca1ce3a4849668a919daaa5e8735d43

binary file changed (1258 → absent bytes)

− .git/objects/0e/f0bb4acb2a054328faea81aaa1b6ef08ab4324

binary file changed (1451 → absent bytes)

− .git/objects/0e/f1467fc037c2b698808c4f8670b06f437a44c5
@@ -1,2 +0,0 @@-x•ŽA-Â0E]çْ™$m".½€˜d&¶hl	qQOo®àêÃ{<øi-eiÁZÑ<ôY¬]ˆÍàc&bJnBAPmTåÝ4@2q)[I$QD铱l=sYѧÍkÕ7*i&}þ.Ïý¹_…–×)­å¢Á“ôÑ 1ªÓ~­É_‘ºoLMXW!.¢~ەD
− .git/objects/0f/03ed98a2eba1beb8db11eb86edb34b2321a261

binary file changed (160 → absent bytes)

− .git/objects/0f/d36c65d057f7ce244a4e9a335d698f075530e6
@@ -1,3 +0,0 @@-x•ŽA-Â0E]÷ْ™„$—žÀýL2µ¥¦)5]Ôӛ+¸úðßðcÉyª-NuQƋOäZh"jGž{ÖFú€1¡À0$qЭ´ÉR•J} &`ᐠ…“ÄÆ2¶§½ŽeSÊq$uýNó1÷W¦é}‰%ßXmµï÷ê¬Q뮵íZ•¿¤î)Ûg*‹â=¯Ý÷¥BÆ
− .git/objects/0f/f8579fbd897417b0d6dad6e920f8882138a7c0

binary file changed (1705 → absent bytes)

− .git/objects/10/93f2858a4572a7a141c96f251f273da4d55c89

binary file changed (167 → absent bytes)

− .git/objects/11/c683f96aaed8fc5cad03cb58c5d1a5cec5f501

binary file changed (1791 → absent bytes)

− .git/objects/12/103f6ad6c8b32cef7a550d8d4d8307f656b9ec

binary file changed (1047 → absent bytes)

− .git/objects/13/9041d9f25f891c340cc0b858838f94306c9b93
@@ -1,2 +0,0 @@-x•ÎANÃ0FaÖ>Ũ+Re'v¤-±`Á†'ø=3i£ÖvÌ"œž^í“>éq+eéäÃðÐ7U’ÉÈhه˜Ø
\ÌyÎP9ƒçœ¦1™›ÖNóèdȞQÎÂóċ…Äì^ÃCXØ'ƒŸ~i} ðtú]®ûu;,·#·òJ.Ø`c²q¢gë­5÷z_ëú/d¾ÝZ=Ó;:ŽŸXéUèÀ­v,U·ï‰®ZE+ïOæøP
− .git/objects/15/9cebdfa4266754e9a10d880aa345087fe46ea3

binary file changed (321 → absent bytes)

− .git/objects/17/f0b2fcca6037579949bed0f62ed8508429855c

binary file changed (931 → absent bytes)

− .git/objects/19/29f404bd7463b75013763eac1c2fe1bbb03373

binary file changed (179 → absent bytes)

− .git/objects/1b/4e38d4a513de8e2fc27d9619999a1732330561

binary file changed (499 → absent bytes)

− .git/objects/1b/5e76a54f1a37ba3e0920ce750eb71528cf66c7

binary file changed (1761 → absent bytes)

− .git/objects/1d/eac2fe1a42e35b994f1b855488f392c50f6a89

binary file changed (70 → absent bytes)

− .git/objects/1f/964c52d8194986ca6879905fbd25488f457fae

binary file changed (1535 → absent bytes)

− .git/objects/1f/e6614e7ded45533c17b26bdb0d4d4f48cc0e79

binary file changed (478 → absent bytes)

− .git/objects/20/0e8a1d9e64883c4442f155f3695cb99ecdb392

binary file changed (321 → absent bytes)

− .git/objects/20/3fe722984873d04f9997788065406b008051c1

binary file changed (918 → absent bytes)

− .git/objects/23/82296bb15427910f85a9a4a5be39677a6d9005

binary file changed (151 → absent bytes)

− .git/objects/23/8fd86cd3c476d75eec0d7ae736adb96dd1cc60

binary file changed (1770 → absent bytes)

− .git/objects/24/861f0a0b2585817bf3ae226d9bb42bad0e977b

binary file changed (147 → absent bytes)

− .git/objects/24/e1f1b0b0f51b252eebca5b168a4e17b4700a4c

binary file changed (115 → absent bytes)

− .git/objects/24/ee306a70ec71338f47f012e1a7ec5668e1851b

binary file changed (178 → absent bytes)

+ .git/objects/26/aa433ce02a16e4f0887189d56ca66cc0fab283 view
@@ -0,0 +1,1 @@+x•ÎMjÃ0@á¬uŠÙZi4ք’e×¹ÁX™IL¬¸XJÁ9}}…n|ðÊRëÔ1ú*Jž
(!¤(šq,ɧsPdÍהԛ^åÙA‹Æ„‘r°¾ŒŒŽ£D?pI1RýèÅ~õû²Â7×rg8½§ÇöØÎ·ÊÓüQ–úސ¬ˆ2­³Öìu_ëò/d.R—_W“YZmý³=¯Pxž›ùݙGÈ
− .git/objects/26/e2203e22a0c92e9fffb7c8d859af54bf1aa943

binary file changed (319 → absent bytes)

− .git/objects/27/af847de0afe29dffa87ef0d755c84f830e4941

binary file changed (884 → absent bytes)

− .git/objects/29/3dd1b539d3932cada98422cd2a4d8117f693b3

binary file changed (1184 → absent bytes)

− .git/objects/29/6daef4bb0fb9e15cdcf2ed42512b88b79ed514

binary file changed (918 → absent bytes)

− .git/objects/2b/9c68df7936d7398cd61b39686392d66ff8f1c1

binary file changed (1391 → absent bytes)

− .git/objects/2b/a3de09ad5a0b0b58d543705380a9a44a31ae2b
@@ -1,1 +0,0 @@-xÎ»j1…a×zŠÁ­ÁŒ®+	.]‡¼Àh4k/kYËF†8OŸmÒ»=ðq~nµNŒq»¾Š@0Æ£u£ËÖjY‹–˜sJ6—RL…©ð0¨…VytHŒ8dC‘¹'|Lb‰FgC)c‡¤èÙom…U¾œ~§ù5¿Î×JÓýÈ­~€v۟Go"Ð ªmÝÒº¼‚ûGê‹fý§\ågÙC{vh#”Æßê¡ZE_
− .git/objects/2c/373856c51ba9550fca9b27b974c3a63db3d7b9

binary file changed (1072 → absent bytes)

− .git/objects/2c/a5438db72b33a2c171f3e9ae9b73bd59c2fd49

binary file changed (178 → absent bytes)

− .git/objects/2c/b647573d63d84667f629ea1e26e53bd3f16e44

binary file changed (116 → absent bytes)

− .git/objects/2d/15c14173d23f664b955cd24f51c82f5f09d91d
@@ -1,1 +0,0 @@-xKÊÉOR0µdp÷t³°Lädàd˜ÈÀðïß¿¦¦&&&& Šr200‰ôô/àÞ¶iNÓ©ÎêèŠÂóçJ8‚¬^<W
− .git/objects/2d/61778b316db7774bc73d9c80cfa8d76e7b7a97

binary file changed (980 → absent bytes)

− .git/objects/2d/d01b33323df8fd6ac686cc492d77822e040e1f

binary file changed (40 → absent bytes)

− .git/objects/2e/95147d7a2c86bb224527a5624c118b53f9c736

binary file changed (180 → absent bytes)

− .git/objects/31/0e7b443f14a92b46059c540620e2e3ec9eeecf

binary file changed (918 → absent bytes)

− .git/objects/32/4d07aa12666c2f03139f626361d1a810c45bc1
@@ -1,1 +0,0 @@-xÅRÁn1͉˜:—»í¡AÑ	Ò(¨)4"ôPEž²«zmÇ7 (ÿÞ1¹¥×ø`Ù~3OïÍóJÛ\|ÎOž{§ð}4»ù9º¹†Ñk+ª{ò•Ù8í½´[íVmUÔSYx*Ñcz¬jg=Ác”ºú]¡‚¯’d¼#lºA¿U6•.áÓW^×-ÒºŒ®?!rê?øÜFb‘IJ)b}¥Qàñœô²ð”m·o@£æèôn_ò)ÏááL\YCh¨·Ø9]x„[ÊJªµXv–Lœ5­&†ƒët<Ì?YKâæbÍ\臿lL"⑫!SG¯» Šl5,²C™X6¼1OôUjJV6‘Þ×Iùq8©€uof²F0¼±EÆÐQù<ûÁ¶Ã6¶§#2³Tr@ÀˆkvµA45‰’ß§}míŸè@Ā^’Ksðœ.z.ÙR^+j‚ît¯ûIe—ûF֚æÖá©òoMß4…ºâÌd±¸q.`ò†Ïÿ°mé
− .git/objects/32/997e49181fa65740bdf9434d98e8f146601d75

binary file changed (682 → absent bytes)

− .git/objects/33/126c8981c21f9755c7eaca90e81ca7d5d6fd62

binary file changed (208 → absent bytes)

− .git/objects/33/d1dadf72d9a1c6217c5a6c7992dcdaaa343742

binary file changed (161 → absent bytes)

− .git/objects/34/f107591ec1e00bba2a7bee5238bddbb4832bdb

binary file changed (1159 → absent bytes)

− .git/objects/35/3e50d70c86a2ab186edac1c205561befde3dc7

binary file changed (67 → absent bytes)

− .git/objects/35/5acd3fb38dd6a8565e8652aca975260ad9ebe4

binary file changed (918 → absent bytes)

− .git/objects/35/cdbdae6aa4d9a87e4e3b7c1f21f1d2e90d691e

binary file changed (592 → absent bytes)

− .git/objects/36/d1bfaedb400023ee2b6ced7d3847183c454838
@@ -1,2 +0,0 @@-x¥TÁn›@í‰xr"$›¶RUU–¨”¸MR5vªÄU–³.(K–%¶[÷ß;€—‚kÔHå`Ïî̼y3oà^È{¼~óê틟Ã\ŸM/¿ž]~ÄÍWB²€wZEÉ÷'Ã_¶e[±rÁñ™ëe˜§Þ­Ì5¹mˁ"“Û–‹uȶũT9Ñ*â>0Í¼ó­æ¨7™z–aÜ<aiáŸÔ~ԏ¡p¥uñO¹^KõP)©a4ÂÜ7êàÜÉå×¾ÇÕlöå–?æ<+ÎÄ+j7Ã[·ÈùtÇu݅m•¬è¦°Š5\拺%MTíkûÈxL¥¾y òš4GÊ^2wï0iƒbFºÀÉUd<.œµ¤\øp2B$ë ä)R¦XœÏ3ÐR“®ë(ã5ó?†_©_ýføåڔ¼HÖ@i`‡çs)mYž+ÍãT0ÍáW<hX8ŏ(ýéKuФAÇiiTÁûM,xšÈ
¶•¯¸ÜaßǶ°Û™Êi‰ÍíRa>ö’\lD»´6šêY+t셜KØýQß`Pè_ 3mÖÍùT6KE¤ÑÙ/z®ø™ž	¿é7“+Æ¿×÷óÿÇÚ×PÇ´™x+%ãëˆÖí«Hh®à$RÃ3óò@»è6Tœ>/üé9-Ö¡vãôzƒ^ÏmªØ-
}4‹Jq7­”®½§×©‰ÿŸ*ý¡X™,
− .git/objects/37/e7da68243123c206a7b9b03e982cd2e1ffde61

binary file changed (320 → absent bytes)

− .git/objects/38/b1abd98d5569fa06054273349167b45184cc6c

binary file changed (682 → absent bytes)

− .git/objects/39/7b16f4af94e0b04d7e6c7063332150ee9113e1

binary file changed (208 → absent bytes)

− .git/objects/3a/e244621eb9dd53cbcca1a8475acf7affae786d

binary file changed (589 → absent bytes)

− .git/objects/3b/4a30a35ea42471082f331a39f573fbc7782f85
@@ -1,2 +0,0 @@-x=Í-à Çwà;ä\˜¥Çõmgk Õ¡+ìñ·ˆõ’ÿÇ/$™`y.7Y°_<Þ¬±Fï՚»GBŸÓÆûYþVWèdyi°w4»G!\¬jrªÅZÔó0©Sx”
Ü<Þ_Òä2Ls›.r[#VXóS'9
− .git/objects/3c/4e5274662ecf122b692a4b2d4b6054e6ecab6b

binary file changed (660 → absent bytes)

− .git/objects/3d/f33a565ba1673aeae361ffa0bdd75ad5aa87fb

binary file changed (46 → absent bytes)

− .git/objects/3e/acc9c75ba313c63d9d9be3616d7b8b9f452975

binary file changed (98 → absent bytes)

− .git/objects/3e/c999f52b623f8b354b6f9f7fdee90db24c3c72
@@ -1,3 +0,0 @@-x¥T[oÓ0æ¹RÿÃQ7©‰´xAP)H[Ù±nS׉‡iH^s²XsâÌvh-…ßÎq2gM×Â$ò'çâïrì[!oáí»o^ýìÀéþÙñÕþñ!œG%$‹0º4Šgwv¿ºn'•Q!¾ ™%ELda(Üíx h‰ÝŽó-ºžæRx(˜à1Ç>1ƒ…Áºi0J˜zLÃh[ò˜å6>nâÐ<‰1yô—ø•áBoˆŸ¡™KußDž`N±4Áï°.F“C`bù°´„QA\d3ÃeVýœ²{ÔÀ@pm@Ƶô#‹€S235	és—ÐSˆ¥$… ð¡ÀB›n§’†C¸öF+íw)g÷h`ðN¦Ó‹‰­°ðƁUjµ°õáÛêÏçàù¾ÄãTDH—V›[=Õ:”×7MUB,i*Ä>Yt&͑,ˆ~uežV,µÿpe5Š%¤Œ¦-¼BqñÁ‹©­ò©³§©#­Ö¶Ü]áÐÀڼșb©Þ¼Ã É!5ç7´kkÁm Õ騐‰-'Hûõï)¦*½P¦¹ A°Æagg~ðü+7	ÌdJÐ(“Þ†¦)Í«Eüxà,`—YÂâI–%”†°xÎ(„©*謺Èh2¯GAV‹=‚]­Ê’ÿˆ	ÝJ	²ˆÚRïþ°ïzPêzÓ&Aøû9€ç™ÛÔomßÈ@n ÿºoÕ©™8uÉjÜilzœ„8õ“Õ´Úäâ8ˆ•LOíµ°1öæð2i pÊ@ãíÃÊ;ÏÒÅK—ÄLoR×\ßî¥×ëíõzþªñÛݤûÈ0^ÍCÙ*ÙnV«ÿÛõ¸ãž
+ .git/objects/3f/019d6c6041e82845c87d8f620f5f836fe5f910 view

binary file changed (absent → 891 bytes)

− .git/objects/41/bb1c25a293d0754c3554f5a07a8a2a883b40d8

binary file changed (161 → absent bytes)

− .git/objects/41/c17d736e3d73852a7d08c691182692e793ab3f

binary file changed (320 → absent bytes)

− .git/objects/42/238709f16db39e5eaaf8841791e35d3c4484e3

binary file changed (2871 → absent bytes)

− .git/objects/45/3bd93c26a9e271a06ba2646d2fed80284a3d7e

binary file changed (122 → absent bytes)

− .git/objects/45/fa42399476a801f23b96599909ab8939757cd4

binary file changed (156 → absent bytes)

− .git/objects/46/4d078f996682b5330d9821891c67f6e58c303f

binary file changed (157 → absent bytes)

− .git/objects/49/c47bca8a7edae0d0851b71284aa6b39a400cc4

binary file changed (505 → absent bytes)

− .git/objects/4a/021a8003bac4534e449b336f4a8e8711dff2e3

binary file changed (502 → absent bytes)

− .git/objects/4a/10a87d8c968f4d836bca3a08d2f44c05060fad

binary file changed (320 → absent bytes)

− .git/objects/4a/7482b12405ea3053e880a198094e00b4a10988

binary file changed (433 → absent bytes)

− .git/objects/4a/c44b6241517d43310da25b086e175b3b9c0b49

binary file changed (159 → absent bytes)

− .git/objects/4a/d51f9dc87b6aa48cb614030521d957b8498622
@@ -1,2 +0,0 @@-x•ŽAj!E³öµei«
CÈjÈ5´¬ž–އdrúx…¬þçñ|dÌË8E@‚ŽLb­8ZRÊÆ8o2£Æ•’³Bƒó릾â)m@-†Éø9òÖ¡³1o9¡ó¼-^–PÅÇØû	±òáú[Žçñ|¿×X>_¹×7Ð
­Îj
$D5é¼6ä_’º•ÉÀû£3¥qϥݡõßý<fW‹cJ
− .git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904

binary file changed (15 → absent bytes)

− .git/objects/4b/839965d93e9f73dc1f00fac60ce31619cf27bf

binary file changed (158 → absent bytes)

− .git/objects/4b/b6b3f484c6c64383b85aff399a1f385357e138

binary file changed (586 → absent bytes)

− .git/objects/4b/c44265a2bbd4697b8408ff44cfdaad4777b18b

binary file changed (281 → absent bytes)

− .git/objects/4c/2353910734c89633d869f0ffccf8f565c93221
@@ -1,2 +0,0 @@-x•ÎA-1@Q×=Eö‚$MǶ âÒx€˜T´vëBOï\Áí‡_[­cOiÕçR@%R$ÝJæ„å2äA‰Ng$JÈçÄAÝ$syv`62±Kô–eqž¢²Õ˜³75áÀ1x'ï~k3¥êM`÷ïŸûçp­2>6Úê(`À˜#zX£GtK]Özù¹Ódҋ5}Ao€v?¹C$
− .git/objects/4f/6d438c143bd74eb0fea554c57583a51f92e890

binary file changed (1466 → absent bytes)

− .git/objects/52/36d892553250d98e5b5b322321702f74559556

binary file changed (281 → absent bytes)

+ .git/objects/54/0238ab17beeafc9cf736595a50f3e395b598f9 view

binary file changed (absent → 208 bytes)

− .git/objects/55/61e9ab1a9d86b8fcecc70202d0263cb525a1ed

binary file changed (1078 → absent bytes)

− .git/objects/55/99915d18d029056942c1193b62f0469dd55de8

binary file changed (519 → absent bytes)

− .git/objects/56/2c5d11641eeb9f7ae77cd0d177fd8c947ed1e9

binary file changed (116 → absent bytes)

− .git/objects/57/9bdddcdb0584c78cee8df569174d8e5174a28e

binary file changed (1050 → absent bytes)

− .git/objects/58/4b0ea086479c87718b10715c5375a4715e6965

binary file changed (156 → absent bytes)

− .git/objects/5a/6881a3d40966a591bf4431aaae918faa3d3ac5
@@ -1,3 +0,0 @@-xuRQoÚ@Þs~…E'$’ÑiUUJ­´ŽMž“®9§9qäÓmûïó](¡ñBÎþ>Ûßg?ió½/~Çgðx3¹Ÿß܏àûZm„D9%«Šggñß(ZYi„¯Hi^•É”©4jƒ«?:ðš£Å(RëÒX‚M%´ÊJ¸$’á–°.—ÜæÂ^‚p0|ÇÂþ°3|£dT¤Fr÷SÌûD¥üzNJ»ÓôéÕØUòM­ñ4;Ý:Âur§,¦dìÚÒ +£7å¨EqjíqrQHÖÇgb…È=›s`‘*[ø¸5aTûWW0l¸Ìÿ?å@ÚÜ9Ú8ȬYG{Ÿ Àîó®`f´Dyh¹>Hð	J_·Ï
SS¤‚`Qƒ»PYÅn–{¤2Òÿ¥9¦«@=dɆ}©ª(E3ï-&Áu̽®±@eRá¼/ߣ¶“„9³‚9L,-épTå`
<0ò'–zøÜëÁ¢Ýº5aAñl[b«»XóʗZëQúrBþáñÞGÌD¥ÉÌ£1«ª„ãëÄ9e—‚/é„ÂÌÖ†‰+µ"8ÿt~°Ô“ÆB³!¬Ô+˜›ŠÍá-FÑa	'ÇÂÆ£ˆÊjè‡)¼·au.<Úê ´(…e[»v£ð#cñÌ÷Òæû&¾¨v¿­$iu T˜¢ëÀ5\„Úõ›Mu<Iôx°QG
− .git/objects/5b/b8bdb97c488abfbfcfe0925cd02d0db1df869d

binary file changed (641 → absent bytes)

− .git/objects/5c/7dd6782bd7103baeb041d69fd3e17410ab46dd

binary file changed (1552 → absent bytes)

− .git/objects/5c/ad4e38d5d9795fd867fe17bdc34c18ac26dfc6

binary file changed (116 → absent bytes)

− .git/objects/5c/d6ac78a332a4565cc05200276028bb0ad7b381

binary file changed (696 → absent bytes)

− .git/objects/5e/48387ea9b3a9fa8fa903f54477534cf8d8dd62

binary file changed (282 → absent bytes)

− .git/objects/60/07e4f98c57a347a051cf7d7de71ca08fd85b8f

binary file changed (1432 → absent bytes)

− .git/objects/60/c2748b7df2f5721d8c242094c744d7a777b56f

binary file changed (533 → absent bytes)

− .git/objects/62/25034f4b33110b1e1e8bb9938649989dcadc77

binary file changed (321 → absent bytes)

− .git/objects/62/2888f76a4bd37398710e1590463719c2129297
@@ -1,2 +0,0 @@-x•ŽMJ1F]絆êt~AĥרTjzʙt$…ñô6x·ï}<î­éë×§9D€ÏR}
¸HäÂB޳çàmMÁ§Õ‘Í™ù¤!û„²äè\k‰‚ V.%óìxYKö‘êê-FC_óÒ¼SãÁˏ^×ÇÛÖHo'î퇘B²>Á3ZDsÐ#mÊ¿$sÚtê¶÷!0;Ðw×-OºoPt§¡r‡#¥—á	g½ÉÝü|7Q,
− .git/objects/63/3f2583dc912547dc4bbb06de8bd1a7c275fcf2

binary file changed (1874 → absent bytes)

− .git/objects/63/50f4f119a8325852c5279f96ae5b0c34cce55f

binary file changed (1142 → absent bytes)

− .git/objects/63/fea90271bdd5df9433756fd72126105cdbe5b7

binary file changed (159 → absent bytes)

− .git/objects/65/31a477b445bfd988c03147cd43c5a0e289b426

binary file changed (1473 → absent bytes)

− .git/objects/66/5fba0e7ceccafda2b2a4e92e342ff2cbfe8247
@@ -1,2 +0,0 @@-x+)JMU041c040031QÐKÏ,ÉLÏË/Je`ú¿ >sÂwßõ7NžËí_<›³ìê PðN-IÎ(-`˜¼Æò¡EóÃÕ%óËz+¹³EHÚBÍñMÌNMËÌIeh|oz}ž³³»Èª¥%·øW~—˃ªI­HÌ-ÈIÕË(f0òe_%”–£Ï,<?)9ñâ-#ÑÍ:
− .git/objects/69/1816444999b3c2b424bdcef7eeb977fa8b18a5

binary file changed (160 → absent bytes)

− .git/objects/69/367db2a6835d21762b09eec97395dd0f1d503e

binary file changed (1759 → absent bytes)

− .git/objects/69/4dea2e0fc5c15b1ef710cee6f953b1afb623bd

binary file changed (161 → absent bytes)

− .git/objects/69/5dee0b1313795711418347aedd65f5bcbca02f

binary file changed (164 → absent bytes)

− .git/objects/69/8a48637c6765d29ae84a3e63bf4e878af2ae6d
@@ -1,2 +0,0 @@-xu’ßOã0Ç﹅5h¥µÇN:	!†Äøy:ˆmO¡qi´¬)‰L§ûßÏIµ­G_Û_;ö'~ÖæƒŸƒoÒ=¸=»»ž]_ÂýZm„D9!«ª{éß(ZÙh„ßHyÙÔل©<ŠÁµ‡ÞK´EjYKðÚ­-….‰l´"lËe祰G Œ¾ÐŽEíÃãu6_(5ÅÊ.«ÜHnî³fÝà
Q-¿ÏHi÷9|‡ônìâË@6VKü¬á2»Ps2v±4讔ÆËå(‰¢4…ì…RTR£Zzp|£#HOabò’?ÝL§øÚ #ˆ6,|$gÖNj×H¼è×=ÄÉú¢Âh‰ÊJ‚ÅW¨…KC&TÖ|c-¨dÏ(ËM•‚y›Ó‡Æ*Ÿô´Q:Q!+ý//1_„Ôm”ìúTSÕ¢÷t8Iùî*Þ§ÊäÂ!0)˜û;úAҞÀAáqLmƒà'e…ôÔwªl‘ñéô”ÆJ>b­WÃÃC˜Ç½sSV”NW5öúó%¿óSÒκS ]ó—7¼ÞsÄB4šü–ܳhjØgï*Ψ8‚¢,Ût¾©Òú‡ ¿ñ>âj­¾l™zñ•ÐL„Gõ#ܺ2
Óá׌¢í+üg™FÆèŽ¢±š{
mxºáñ\0·ÓµN–ÍyIL°[Ç5V/¼11ï5ñjÅÃ!ô²¬—@­0G—À	BíÖæŒîxÜJô¤ä\š
− .git/objects/6c/fe3c139d7fb98d3057452404339c790f2aa1d3

binary file changed (603 → absent bytes)

− .git/objects/6d/30f1c67e51b4d6acd23a7bddb933aef1cee5a8

binary file changed (433 → absent bytes)

− .git/objects/6d/9f02d0603a9cec81b119f36d16fdcfaebada1e

binary file changed (706 → absent bytes)

− .git/objects/6d/d1040ce0fbc93348725498c912f0e19175d433

binary file changed (158 → absent bytes)

− .git/objects/70/15cd0af9b0fc60257cff8d057cee6a475f44d8

binary file changed (456 → absent bytes)

− .git/objects/70/45659208ee4d7945199fadc8b48774da89d234

binary file changed (280 → absent bytes)

− .git/objects/70/8b4d9119f776f28cc85a2a0f58b4bf1c1e7b43
@@ -1,2 +0,0 @@-x•ÎM-Â0@a×9Åì™ü5ѝט&[jl©qQOo¯àöÁ/͵Ž
ŒÆC[EÀùÂÎX":ލ‹±=užˆ¸d)ø²S¯òjƒ7©Ïb0¯{ v(˜µeB)”Gş6Ì+ܹ¦áü§mÚ®Êãó”æzícО4Ñ ª½îkMþBꖳdhÛ"oõÌP@Ú
− .git/objects/71/8178fa1b3fc34b7d7d961792c09b4b7b531b3e

binary file changed (185 → absent bytes)

− .git/objects/71/effddb09097324b4875677e94cd09048ea6521

binary file changed (1015 → absent bytes)

− .git/objects/72/2f61d1774f7fbd456a5ab611c54408e61f2cc6

binary file changed (181 → absent bytes)

− .git/objects/73/e675e209d1125be27d5c119389c9337942f3b9
@@ -1,2 +0,0 @@-x•ŽK-Â0@]ç³d’L>—î=Ádm°i¥ÄE=½½‚ÛÇ{ðdi­v0z8ôµ”²ø ÃàˆlÈäƒ÷(^t&뜐Á\0ŠzóZæ¤SÒb›ÁfŽd·èáG6£M„9*þôqYáÆMF†ó·¾¶×v}6®ÓI–vM¨‰v°pDƒ¨vº¯õòW¤î{xÔ©ÀÈsžêüT?<`D
− .git/objects/75/be0ead191c37fdda11fdd628c79538651403da

binary file changed (682 → absent bytes)

− .git/objects/76/86c4a999a50079bfd907f126625c1c46def3a3

binary file changed (584 → absent bytes)

− .git/objects/77/a5e6a3a94cbd5f7facc47bed8c940ab8ad3f5c

binary file changed (931 → absent bytes)

− .git/objects/78/b20a019fafabb14b2745db2c5912176729df2c

binary file changed (179 → absent bytes)

− .git/objects/79/9af54fbed761e676c67738cc6233b446e0e1e7

binary file changed (906 → absent bytes)

− .git/objects/7a/e848a180a7f100d45ab5ac2437fc0adde1f80e

binary file changed (1063 → absent bytes)

− .git/objects/7b/47d4cbaad3be6b78ecb8c575ffc37bd46a5e5b

binary file changed (1333 → absent bytes)

− .git/objects/7c/e9930fef6b52b551fff42c7b10fde4d08baa0a

binary file changed (581 → absent bytes)

− .git/objects/7e/51503aee21f2d28f8a91d72e4c081cb7b399e6

binary file changed (178 → absent bytes)

− .git/objects/81/ef35d79e1603434714aaa57410da0fa9f71e6e

binary file changed (82 → absent bytes)

− .git/objects/82/8e849a50ad7d3abf4afe0cc48a2b68512310cb
@@ -1,1 +0,0 @@-x}RQkÛ0Þ³ÁÿáP÷€®P¶QÚBÜm
¬l¡MÈCæb]f,9Ò¹]Öî¿O²;×-cz:ÝÝ÷Ý÷´QfïÞ¿ºOàjúår9½ü_oÑ*ʲRÿppþŽ£8ªŒhÂg¤¢lêÉ´¡2ŽF°áNÝew%ZͲª%Ø5\É­D8ñI¶'ìX'%·ï;ÈúfèÏß3¢Zü§¾$©\—¦ð0G»5¶r0[,æYÐéê%ÂÉ	¬GÙ@GÃÛ8Ïô®¤#0[-ZÍ+L`Ν»3VŒã¨—	éù3øS¡Zº 5ɂ“4®‘«ê͌k¡Ðö¸AKsÓ:ï¯ëý7C=¹-LS+t`Ã@pðRŸÙÁÓqÔþ	^C‰þÙmèßu‡Z\c­ö@ÇoŽüöØjµJސ%°æÞá'‰JäÏö3t‘ŒØ…Ñä÷.öu‹b„?é°¤J±|œýì´<:³—:Œ1VþBqz蓬ƒ<~º€éuxwÙ¤0Ú¯Ö¬ûíξ1–´QÂ|˜ÿž ڜ
− .git/objects/82/94ea0d9b3cece7eab328cd560b903f4de899f2

binary file changed (673 → absent bytes)

− .git/objects/83/ac9915be5493cf66f1f96de88b5edce6c39929
@@ -1,1 +0,0 @@-x•ŽMjÃ0F»Ö)f—EBýE6”ÒE½†4–aË*ò“œ¾"7Èö{¼ÇGµ”Ì ¬ýà#`N«4çm*iJŠh6҉B@-þ|‹+Ãy´SŒÝÒR»Ñ:)t·ã4m²ùžþηÚà׺yøzæù1?~®Åçå“jùiÐ9iF‹pD…(úÚ¯q|K—·õÀ°×6Ÿ Ü26ð°±o|‚=/ËB];®¥¶VwñI“Qu
− .git/objects/84/bf304493959e3a08b3807bd704ec632a9fb8a9

binary file changed (905 → absent bytes)

− .git/objects/85/2ae7db61bff45b972b9a21023e162f5003d74d
@@ -1,1 +0,0 @@-x…±jÃ0†;ü?dIi	H!vK†–v¡³b"m9'¹¥”¾{%7„vª¶Ó}Ü}ÿ[Ärµºù3<mŸw‡íî/oÄ­Wšô>²ëO3ñUeÑy=¶„GŠyˆ®
e1G¢º²XàÝS]7xŽ8ªuƑƽŠJV‘~&BTÿc²¶Šo3\_a\ß43˜»°TC‹¼[d1˜±o¢ó=ŒçɰKQ’¢‹2þƒ¥”“SŠœë5ªßšâîO}¡600e‘U¦ÌécƒZ2¥ËJÍZjöëué\¹okßsð
− .git/objects/85/b4c8d2256c11c570cacf64895353c0b9bd374f
@@ -1,2 +0,0 @@-x•ŽÍjÃ0{ÖSì=¤Õ%¥Çœûëõ§Ä¤²‹«Ò§¯ó¹Ì0º¶6wbæ·¾TrÈ:fܨ.&¸¦h™‚›²-؛oÙ°tÊ^´GÄP¼Ö”ª«%MÈyŒ˜I})\ŒÜûuÝè,M¯B§¿ùö¸=>.M毣®í\°ÃࢵLË֚îk/Iæmýݗ&zFöÏóíFË
− .git/objects/85/d7f3da362229792ee03571c10da871b205a69f

binary file changed (281 → absent bytes)

− .git/objects/85/df8a78c3966d87d24b5e8eac0a2bdcbf243c47

binary file changed (248 → absent bytes)

− .git/objects/85/fb86ec84907bcc86531dc82871948ff4d471fa

binary file changed (11349 → absent bytes)

− .git/objects/86/dd8ae614f86096df8beda328370d683fba07a4
@@ -1,4 +0,0 @@-x¥S]o›0Ý3ÿáŠæ$`ëžZ¤L-]ÕTëÚJɞB\|Äf¶I2Mûï³
¡4۞f	ùã^Ÿ{Î奿/p}ýñÝÏèfwßfw·ð´GQsB‘.”(ÙVÂEôËu\gÇi[#|A•mß-«ºŽzϪ9ê;BºNØí͵1×	àP @ƒSî.|oI]nJ¤ð™(§?vjd"®€HHÿ•üPJeÌ<äÀ0Q¸¨þiw(ÊÜГ†$Ï+T}‚{f§•ŸŽX…°o×ÁÚ¦>œa„Q­“TDµŠN˜å®c(J­Ê¬®¡ÏË9SÈt&֋d–ý¹¾˜Æz+o¾\>¿¿Œ/Áû¾Êm¿-ÁËDƲÉ@dÚÍääÙyø†3†¹*9K Bl"íÈM–Þ2üq)“Ñ-Ë9Õí‘tn#µàæêº#`Æì'°#
øÙÑ÷ZÓF[yÔÜSÓp<±ÞÆ¥ÖFÈF¨ÃL@2-ÇupÒÕ8ÙëÿÖÄÎ,i[øÜ©“ô{R·Óÿ¶%’W†\Ás<‚_#Ûªìx^øjŠ1f<¬Äºt›Û{h4tÓßó¶°û®å†`ßFÓó¾ò>Žü‘P.
− .git/objects/87/66065959fca5de5327f875dbb67559f69b52b6
@@ -1,3 +0,0 @@-x•’]oÓ0†¹î¯ð|µ]$^5!QêD*éÐ݇F*@Ó.\Ûk¼:vˆOšVˆÿŽmPѾïsìsÎJۏÏß¾¡'óÛ,ÿ~w‰-(5º[~X|ʎùz‘2ÏçèÛU~½@ãøå53N²†iB.o0Â@õž¶mãö"¶õšä÷dXã`–¼rÆNioWj㒿PƓɤ7©d"¥¥æ_	U$4j›à̐¢|_IŒx¿K0Ȑ@Ÿ"^°ÚIH–ùÇèF$¥ @˔’aÖÊlPQ˧[.™‰¹sÕR'ØÁ^KWH	0€;AçNðm°tXÇkUr5÷ŸaBX¾‰P:~ö¸Wîg¶e½Ö‹ô«”îè¡'Ù|–ÏF­2¶±5Ú2ôÔêNÏÐϊ­åŸŸžMMG„<>¦£— ¤Ïâʊ=R"Á¥2Ê?B¨m¿µ¢Ñ2Òʁ?­×ÌùÊpV>N¯»{GI•ÒF§T«?’²»ñ&_.“Ÿ%𢩢YE-áSÀ굯.™ò¬A%ÌgB«ÿ"fEc6R„š£¸W¾«S;ÅQÌ{ëÀ¬¾uÐÅý?ˆí%GQ—¾YÝAh§xa’ÐÄwCOù)”:ý
æ{.
− .git/objects/87/675ebd8ba75eb85ed5ad0ba5888fce6076010c

binary file changed (931 → absent bytes)

− .git/objects/89/2ea0f9d3ad0fefdbacb4e06c7629c1d4317bad

binary file changed (280 → absent bytes)

− .git/objects/8a/4e26e09c96d9bd95bbefa4c2cde4fbf8087382
@@ -1,1 +0,0 @@-xKÊÉOR0·`HÌɱRH­HÌ-ÈIååâå‚2­x¹8Ó3’a2zÅ ÉäœÔÄ<TQ®‚–^¾‚–>˜ÔËÈ332Ißå
− .git/objects/8b/beae61080d264f5b69734128be1ecea8d6bfd4

binary file changed (604 → absent bytes)

− .git/objects/8c/5dd7b601ae56b88e967ac486c0006561548b87

binary file changed (321 → absent bytes)

− .git/objects/8d/9c0ac2c94c7beeb8658183e131da7ce5effefb

binary file changed (321 → absent bytes)

− .git/objects/91/e943bb62869a6178db375f7cb03e274ee28ca5

binary file changed (616 → absent bytes)

− .git/objects/93/ac39e13883ec31ab749f768d790b6b14a0193d

binary file changed (116 → absent bytes)

− .git/objects/98/5425b5fac6f110e7da367684ea0168dbc8d4dd

binary file changed (445 → absent bytes)

− .git/objects/98/786dafc5b13181d5e4f6806a98124101fe317b

binary file changed (955 → absent bytes)

− .git/objects/99/ea1f98242bf7bd4527f7137c29cecb1dc6964a

binary file changed (178 → absent bytes)

− .git/objects/9a/6ebc14c4c86e50b3654d62c33ed7d83351c524

binary file changed (762 → absent bytes)

− .git/objects/9a/6fccf7fcd2cd8aea37d5ec6057d9c18b6652a0

binary file changed (3015 → absent bytes)

− .git/objects/9b/b7324cccda0268cf5e5f318992da50b4f4f003
@@ -1,4 +0,0 @@-x­QÑnÓ0å¹_ᙗí!1Õ$ ki¤CC6¡L€¦=¸ömãÕµC|Ó´Bü;v´2Ƽù^ßsνç,´]ÉËWϒ£ÙU^|½¾ %n4¹¾y3—1öù4glVÌȗËâ܌㤨¹q-•5\3vñ‘Z"VgŒµm·§±­W¬øÄvkÀÃ3Âd,QÒ,éôvm\úËx2™ôà0-\fɐû-±Šà[£¶)Í­A0û-(}•R„²À>%¢äµLoŠ·ÑkJX– B
Ù{@Q6Uœ—YƒLXßN´2kRÖ°L©ÀM,œ£¤R‡{
®@JÐ:Ý@‡NéU€t*NÔªBâjáoãRZ±ŽT:¾÷tè{¾åý¬¿’õ¯,Йc,9ºÍgçÅùí¨UFÚ6¶F[.IJ–!r|B¾W|sß?>™þ˜Ž»»ËF"¬7uaåž(™Ò2Ê/!Õ¶/­l4Daj߯ˆÐÜù¨¯‚ýÓÃʟàáÊÇS/¹€w`@[z“|é“íl’‰†dâãóí™Oˬ/»e‚ƒ¼^ùTé†+¿Èá_¸ßâ·MþUõI¹ÿ«FvG<–úÕ¤Ö»ÌBtþØàPö”KX
− .git/objects/9c/007b2a800ccd64ea6589e3aaf436dd386c5879

binary file changed (181 → absent bytes)

− .git/objects/9c/39c23ffc9888f808ae093fdbd8ab7f27d175a2
@@ -1,1 +0,0 @@-xe”MoÛ0†w.ÐÿÀ5‡¥Aw@±a½µÝ!Ãz(ú1`T¶˜Z,i]7ÿ~¯ä$‡
0™")òá+×Ö×ôñìËçwZùAoç$­I„ç;KÓöáýñÑñÑnÍŠ^9n)uÊZZ=<ÜRâ™.XîØ‰ãݜš>F¼Ù-ý²œò*Gçggtã¯I¼(û{ڊ„‹ª2oKã+Ý´§ÿf“§NiFÕL*QçuoU$å4qW³Öª¶e'ø”Ös2kÚúžå7ªVv±ŽÌ´RiÃ(\…0§—>	‰Ú yë~_I›ÝÖ%—ŽY—£B/dð¸lŽ¢áFJ½×‡N÷œß!~0Ò^d|ºRÉ4”ÛÕ´î]“)kdKÓo·?ÎÉ;pZûHΧ9àñî†î|/Æ=—<TTÇDSÃKzªz€¯.¬ÕS‰¹Ïè›R<¶¶˜Êè›Æ“åÉSF‘˜«K	ë»ì¥¥)ƨ@ésÃ>ÏV•IßSd¼ÁŽîß¶<>šL&ô•;Í®1œ²í¡ej|„›Š’ȯ÷Z"c֍FD@ÏÀ5§2ÚÆöÜv—«‚+ÏyoycÑ6A˜,GQ	¿	¤6?ø]·½Û°>]ŽÅäãö¢‡?½‰yª(&#”»öÖú!Ã.òⴛÛþàÚ) $šÍ:ÓñB¶ÓlVøíýF‚;¯?/ê­p’ˆäÅydvIƒ:³TtØûçš9_”ë»Àb$WééÞ©@4Úl°þÉÉküã®.çtŹ 4Ï
ŽW¦ÜÔҞ“û È+ò6e&5A­yn)p”N¹†‘W·ªBÚñˆ]£‡4„såoÁ=îÃ_FKsƒ
− .git/objects/9c/54e55cc84dfa3ff2649648983bc83143370b10

binary file changed (178 → absent bytes)

− .git/objects/9d/e2c9da7719f0fc9bc022d1377992812a7544bb

binary file changed (489 → absent bytes)

− .git/objects/9e/312f7816623a831ed832285328746834e6886c

binary file changed (953 → absent bytes)

− .git/objects/9e/7e76a48901351049e9c6fe083ba4bb95c2c43f

binary file changed (775 → absent bytes)

− .git/objects/a0/6d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3

binary file changed (169 → absent bytes)

− .git/objects/a3/3f00a997926762956b66487bc763c7500b5912

binary file changed (529 → absent bytes)

− .git/objects/a3/7a47a2c1e944a56b3018b388c79fe13c082d4d

binary file changed (493 → absent bytes)

− .git/objects/a4/0d122f65722cef8bbeaa4192b0c65f24e3dac8

binary file changed (627 → absent bytes)

− .git/objects/a4/52888e3b29d25f2f4b06e3f1cae1ddba210add
@@ -1,1 +0,0 @@-xEÐAKÃ0`σþ‡ì¢²vUAv¨…UeŠÎƒ”ÒæÓ²¤K¿¨Cüï&ÛԜBÞäɛÔÊÔpv~rðávz7{žÎ®áþ­2\ x"+õ[Ãø;Dƒ•N!,¸ÔðѢŰ(W±ÿã©i]—̉:ñ—¯WòU¢€+N<)6„;xE€Z®…×[-Àâ.@˜hصxÄNm¶ÙišByÈ.&Ô/7²QÉ?iÜÒJ±ê¨ò@ßÝû‚Øw
ÓßÀóEÒÝp‚’e§Ðæ/ƅ»öä‹fuÎFÎªËÆuž÷›XµS}âge8²ýžð/¡6(é=_.€3˜¤“vÏû}«q1
− .git/objects/a4/b9abe272231882d54e9a54a8e29feb1b6f839f

binary file changed (711 → absent bytes)

− .git/objects/a7/1ae79e4cf33baeecab2eeecf21ae31d35dd99f

binary file changed (168 → absent bytes)

− .git/objects/a8/f041ca842f9d4b30406cf727910b74b3cc92d6
@@ -1,3 +0,0 @@-x•ŽA-Â0E]ç³ËdÒ¤	ˆXpáNA/¤[j¬”¸¨§·Wp÷y¼?N9HšM™™!$î¬ÓÔɄбQ!¢´Ž]ˆQªFZÆPdñö3¿-x4«¸Ñ]bˆ×ɨwurM´um,+á?¥Ÿf8û{ûï0.ãr|d?<«8åÈIÖÎj‚-¢Xéz­ð_‘ÀŠ*‚\/·;œÚ{+~rB4
− .git/objects/a9/cfae246b204d28cdead9aa089ae8a7cded99b0

binary file changed (281 → absent bytes)

− .git/objects/ab/41fa19ef0fbeb0088d8f325b1dc4280cbe9817
@@ -1,4 +0,0 @@-x•K-Â0Ego.Hþq$nã%}iC‘…ºzëœî{R«µtRïúBYªd®-¥Õ#Ïh¼u6©„ÕC2>;"öÀ…îl~ÃZ‡¢J2j©ãè·‰Á¹Œ>-†á«Om+Ö4!?e^çõ<V,·CjõBsŒ²RÁžKÎÙF·kþ’Ø¥-cëÐTœ	¶¶wy–x#ö"žF¼
− .git/objects/ab/8f12f061e87b2922d0371d0c9e971ca49c8de3

binary file changed (580 → absent bytes)

− .git/objects/ac/1fd40fffacfeb8c1880a86e9dc0aa50c9c3cf2
@@ -1,1 +0,0 @@-xuQßoÓ0æ¹ÅͼlÉQíuM"vDad4íÁµÝƛk‡øÚ´BüïØIÄ*ow§ïÇÝ}Kã–ðúüâEv2¿™•ßo¯¡¢Û»7‹÷3`	â×ó⼜÷wånjÓWP6ÜzMÚYn¯?1`Q}‰Ø¶mڞ§®Ycù÷QkÉC™Ð3•$Y‘u~û±>ÿ‡Êx2™ôäU\ÙF[R¨[½ËÙÌYR–’òP+¢ïrFjOÕ§ *ÞxEù]ù6¹`€EFšŒ*>(Õ¶N¿'-2짙Ñö	ªF­ræ„â6Þ3h”É™§ƒQ¾RŠPðl:@ÇÎÙM¤t&^4º&ð§q)xJ¶¤MúäŽØ|Ç{l8ûªÈöpˆÙÉýl~U^ݏZm¥kSgãrXm­ˆéÀéü¬ùZ-Âüôlúk:B|x(FÏ&Øÿtéä´ÌÙF[–z×·NnJ"H5a^ƒ0܇¤¯£ûë…u¸ °Ÿ%t§Yq¡ÙA€\}¬~ڐk÷õ!—¤Ï%!¾Ü]ú.¥ð9Þ¬C˜lÃuX Ÿfȃñó~Œg…q俳5ü
− .git/objects/ac/4473886e6ba9209e373ecacdf085588c79d527

binary file changed (616 → absent bytes)

− .git/objects/ac/65ccb7a09106d00d93cb9ce559e6265ae9bdba

binary file changed (56 → absent bytes)

− .git/objects/ad/296ab5c62662ad2f55c20cd75483c7014e3a9e

binary file changed (1002 → absent bytes)

− .git/objects/ae/3bc1e76696168e39e4cf60afc4131175005b11

binary file changed (280 → absent bytes)

− .git/objects/ae/599a4b87624927da288aa5cd12b2b47b0c7e2d

binary file changed (614 → absent bytes)

− .git/objects/ae/d160a086ca22c96b3918eb9525818ab4adf8f8

binary file changed (281 → absent bytes)

− .git/objects/b1/97449e22aa6e00dcbb765294c13b957ad35207
@@ -1,3 +0,0 @@-x•ÎM-Â0@a×9Åì™N~ڀˆKà&ÉDK‘&]èéõ-n|ðb-eî@äv}cuH^Grì…ÆÑ&g\¢,iBšë4Šzñ*Ïql	)Am‡À>zKä#JÊcÊ!‚ÖŠ·~¯+\¸Ä;Ãñ3/ïå}¾ž‡XË	ƒ8¹‰ÈÂ	Qýêo­Ë_H]k] Õ"°5yHkÐú–3Ô­«/THg
− .git/objects/b3/591481b033fac241826b9fc64a51d925d71175

binary file changed (615 → absent bytes)

− .git/objects/b4/73be4e130f0ee35eb42d4037b2c99ee5003326
@@ -1,1 +0,0 @@-x•ŽAnÃ0sÖ+xË¡@AJ®eA‘c€¾‚"©Øp®rH^_}¡ÇÝÁbV¶Z—ޏ‡¶›Á”¼1–¤‹Í,y0%Ž>	é(fV÷àÝî
"M§Â”C‘0ä¨QÓH1yÁ”{Î_¡3süló¶Ã…«Ì§÷²¾Ö×ùZy¹}ÊV¿¤@)a„ôˆ®·ýZ³Ü5™Ÿ˜ù²Ù½U7Y¦în¸Gõ
− .git/objects/b5/c49f759d54940ec00c97cc026a1e759eaeacc1

binary file changed (1550 → absent bytes)

− .git/objects/b6/3279c85b76f94cc28de65c1a8c2f65c1814e7e

binary file changed (156 → absent bytes)

− .git/objects/b6/4527d35ee22c00cd184fb921429a7db1984bf8

binary file changed (988 → absent bytes)

− .git/objects/b8/3c2375bba608232746064adfdb067cf57e5d80

binary file changed (180 → absent bytes)

− .git/objects/b9/61383890c9e39ba7e178c2f3afb5adc10ea8a0

binary file changed (605 → absent bytes)

− .git/objects/b9/eb5d552bfc0adee1044e395991edcfd292826b

binary file changed (978 → absent bytes)

− .git/objects/ba/09adf09da69f7bd0411faa4beae8d28026eb7c

binary file changed (958 → absent bytes)

− .git/objects/bb/f0dc8f66b96264fdfae4c0bf005d5338436767

binary file changed (511 → absent bytes)

− .git/objects/bb/f22517e7bb65f1c989ac568e5d6fe08f7a8b51

binary file changed (455 → absent bytes)

− .git/objects/bf/bd19dedb8b81537db010dab8523cf46ca5e8a8

binary file changed (542 → absent bytes)

− .git/objects/bf/ed8952d1f03e073bc0189e9bcc1371850662ce

binary file changed (281 → absent bytes)

− .git/objects/c0/9136db3f6d1b79503253d341373405dd2f0e13

binary file changed (169 → absent bytes)

− .git/objects/c1/1eddba9f3bf52258e78eac875bb8d59575c4ef

binary file changed (319 → absent bytes)

− .git/objects/c1/ef5202b4e0351ba9c95229c0edf7dfbfb9bb33
@@ -1,2 +0,0 @@-x•ŽA-Â0E]ç³T™1i’‚ˆ¸òcšÚR‡H;.êé
x—ïÃã¿TDFŠÍF眡·lŠÎg—{fËÔ¶!4xGJb²žÉІß:”n,i`8}ÆiÖËCx|R‘3CŒ>¢'ØãÑÔµ^iþK2W^2üTØJY´BW;ç"0¨¾ºù„¢;U
− .git/objects/c2/d02249f1afb2578f5af2fcdfab5bcfbdcdb2e4

binary file changed (60 → absent bytes)

− .git/objects/c3/ba3cdbd0c2f4fe371654b40c77b6d22dddc459

binary file changed (915 → absent bytes)

− .git/objects/c4/41d386e187efdfa3b1992b4bd4406bd9a2ad0d

binary file changed (984 → absent bytes)

− .git/objects/c6/56325a56d86c044bb5136b9e8dafa421c4f758

binary file changed (557 → absent bytes)

− .git/objects/c8/298c807614715a3dd52fe3fddcd74b42d8dd51

binary file changed (1169 → absent bytes)

− .git/objects/c8/59418b5c47a1a2516f5fbfa3881490687126fa

binary file changed (498 → absent bytes)

− .git/objects/c9/1a524dd7612f6b6b1a10132e0315ee38c4e7ac

binary file changed (169 → absent bytes)

− .git/objects/ca/7171c6a9384a3af595c1110538b011803b834c

binary file changed (727 → absent bytes)

− .git/objects/ca/b2bc3ee178be9364cfc53d425947736f8898f7

binary file changed (1010 → absent bytes)

− .git/objects/cb/bdc6717954437d467660c6c1d4355c420de08c

binary file changed (281 → absent bytes)

− .git/objects/cc/746e214c400d625c17bb704964d2490009dcd6

binary file changed (554 → absent bytes)

− .git/objects/cd/4c39b6676acd7436a462a964926eb11e4b348a

binary file changed (179 → absent bytes)

− .git/objects/ce/c17859d0a08acd01b9297297b32881bc4f7104

binary file changed (185 → absent bytes)

− .git/objects/cf/34a7265591f7c3f2d241bd7a554e96c85c68d5

binary file changed (158 → absent bytes)

− .git/objects/cf/ed5d601e7c6661a4c95c652d865834a2960cc4
@@ -1,1 +0,0 @@-x+)JMU041c040031QÐKÏ,ÉLÏË/Je`ú¿ >sÂwßõ7NžËí_<›³ìê PðN-IÎ(-`xûîý„½¦+%՜Oû_ýöC\~í¨9¾‰Ù©i™9©ïM¯ÏcvvYµ´DàÿÊïryP5©‰¹9©zÅK‚:ú¬5/Åë{³=þxêáÝ]Š\w“]>¿
− .git/objects/d2/5e09437126d6267b441999d66ed90f352e67bd

binary file changed (178 → absent bytes)

− .git/objects/d4/6ff18dce582c39f62e9ad1a96b511f0fa43a75

binary file changed (148 → absent bytes)

− .git/objects/d5/02a059e60a1f025639da03678a15d54c4b3e78

binary file changed (208 → absent bytes)

− .git/objects/d6/92ca264bd3fbdb96606ebd98c8386f57bcea99

binary file changed (1040 → absent bytes)

− .git/objects/d6/ef2f17034da6c0b06de2b23faea8f7240cf232

binary file changed (207 → absent bytes)

− .git/objects/d7/1598db24de6255e4a1d7a3dbd3c86a39b05b8f

binary file changed (281 → absent bytes)

− .git/objects/d7/52cbde2090cf51b382e0060e0d13a90ef9dfa8
@@ -1,1 +0,0 @@-x•ÎMjÃ0@á®uŠÙÊh¬èB	Yõãñ(Ž¢¢È”ôôõº}ðÁ“Vk@äÞFWïOyfÔ *Âyaš‰&ÒÉQÎ$sÖH.˜oîúà‰bŒ9xvó2…)Å`Qí)¡óS°IÈR¢ïcm¾¸ÊÊpþ-Ûk{]n•ËýCZýël#Â;¢9ê±6ô_È\ùYzÛGyÜ๶ý¾ÀOë›ù:©F¤
− .git/objects/d7/b08975219be4409e54bcb5fa9ae7a85def6e31

binary file changed (1403 → absent bytes)

− .git/objects/d9/14ad60c2478c15e417bbfbae1ae6cbacfb8968

binary file changed (320 → absent bytes)

− .git/objects/d9/50655d5180bc080ff323a21ce6d2c7e369a82b

binary file changed (896 → absent bytes)

− .git/objects/da/b38cfd353bbdc462641543658ea8acd3eac19d

binary file changed (928 → absent bytes)

− .git/objects/da/f5ffbd0e64b1c1405b2bc670dd396d9c544a14

binary file changed (208 → absent bytes)

− .git/objects/dd/9b5e8fb8df41e00992dcbedf38edd8c0d25531

binary file changed (912 → absent bytes)

− .git/objects/de/16c2da1cc71609774e151a4e6034c07965db8c

binary file changed (424 → absent bytes)

− .git/objects/de/93e13807a1416af9226a89e7292c83ca984bb0

binary file changed (1323 → absent bytes)

− .git/objects/df/0eddb596d9d9aff78156e3cae6300250de9155

binary file changed (675 → absent bytes)

− .git/objects/e0/bec6bc6198a44edb82561a2cfcafa703694828

binary file changed (147 → absent bytes)

− .git/objects/e4/e796e5dca1f617ad8ac77adbdfa8fc38a1f4d7

binary file changed (1759 → absent bytes)

− .git/objects/e5/afddd93fed2971b278890973cea1740b8011a2

binary file changed (207 → absent bytes)

− .git/objects/e5/dc6abf9873d9eaf80c4e5d308832b23e5b18cd

binary file changed (1028 → absent bytes)

− .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391

binary file changed (15 → absent bytes)

− .git/objects/e8/1ac2e44e625bbd33673dc01092b64e2ca8679f

binary file changed (281 → absent bytes)

− .git/objects/e8/7a4422a7db2bee721ce1a88d5286ca1570d36a

binary file changed (560 → absent bytes)

− .git/objects/e8/a9b100db71a644cc6cf513f26b5f44a42d17ab

binary file changed (972 → absent bytes)

+ .git/objects/e9/73b1dbbeec389cd09e15e3e2e5bf48df82b0aa view

binary file changed (absent → 1358 bytes)

− .git/objects/ea/395fce07d46082dadd0432b33875394c27e62d
@@ -1,3 +0,0 @@-x}SMÓ0å)ÿaN‹„6îP±U»¢”BWl÷°]àl;ÓĪcGöDmøõ8išn9)Rôޛy󡭀Ow“7O¼À)\žH2¯Ê8ú…Î+kznÈÆlGK.¸N.äýFlG_*¥Óä¥.»l[U”ãèQI4þb±yxéÁä›Ò-óø°\=mWq´¨(·®÷„…Fï¹I…ïœHÅц+CáÅNõGíë}ý9+¸ÒLÚ"ŽÖ¶À’g½eNTúé`)Ê+Ñhk^Ȝú^—œ0³®>ÿFq=»­-½ògv¾*с/¸Öp@;¦x°n;ë ´à¹…Ôš·Zí„Ê 4;nd
Ò¦(¸GGÍ4„㮎#€Õ±±i²±iZŸ6œ+a˼2{L¯ÁuhïèÙV¤Lv­Û'%¯±Ÿ¤t[Ài_±D“ž}›-/—Ñ~ÍçØ»ÛSQzrÁ©Ýχìnn`6d£Q§“¶Û˜¿Ò;ݤ“¥Ê¡¤°…^0±÷]¨-÷uÉÒ¸Œ;Ú µx³1ûØÑ3<&¥t˜ˆp©a<mòaGéudó¢‡Íz¶¶r“g«Qm}9òvâM5ç£×ÕLE[Æ|úmô¿³cmÈ_±:ù÷
− .git/objects/eb/218fa1ac0207d8e1eecff6a59b9789e1bc7df4

binary file changed (282 → absent bytes)

− .git/objects/eb/a023660b513baa6686d113b0d5108a83448e4a

binary file changed (207 → absent bytes)

− .git/objects/ec/a1b33fcd1c0373e31d108a81dca8be042fd89c

binary file changed (672 → absent bytes)

− .git/objects/ed/eeef90bd35a9192643cb4fd5f6e108171fadb4

binary file changed (116 → absent bytes)

− .git/objects/ed/f08a80f0a001b76e1fd26def6ae46c7d2d0cad

binary file changed (1457 → absent bytes)

− .git/objects/f2/3c5d037a1343dfb0fa58676c399164dc58f7ee

binary file changed (281 → absent bytes)

− .git/objects/f2/6ab906a9c670c4cf1c0d85fb9e2ba66049cd5b

binary file changed (1387 → absent bytes)

− .git/objects/f3/073c846e4efaa3a1997750b01c078c36a14718

binary file changed (122 → absent bytes)

+ .git/objects/f4/3a124452e69b4f2ef92bc8388796f2af9d88f3 view

binary file changed (absent → 321 bytes)

− .git/objects/f6/1d5b2caadecbdcf54d2d0ad7b131ca2adcdc28

binary file changed (172 → absent bytes)

− .git/objects/f6/2e75a62487a4b516a960e045e193098208502c

binary file changed (626 → absent bytes)

− .git/objects/f6/e848cb8cee1bc156a72f65022e443a068cae23

binary file changed (321 → absent bytes)

− .git/objects/f8/b79cfde7e99e07a48a906d6b0f43517cdee2b3

binary file changed (507 → absent bytes)

− .git/objects/fb/f8eefabf8c61b21569f198ed873cc8558acd68
@@ -1,3 +0,0 @@-x¥SMOÜ0í9RþÃӂ´‰ié©BÊҖJe[	Zõ€8ìm,9qðìÒíg’¬Ó
%R¥úŒ<ožß¼±o”¾ÁÑÑÛ7¯~îáüäËÙ÷“³øz/ŒÒŒ~錬ZìþŽ£8ª4÷Jà³p·¥o²í¥ã(¡PÄQЇR-âHV6wž)¹”‚ã=s,;];ѓfEÉÌ;0‹b-¼`M›_y+Høä\ÃÛã:¸º%«9i5âÎëÃŠšŸ2~±Ýèó¡01ǃM1.Œ£–qƒŠQÏH¼‘2E²$b“wbkÞFãZì£a†Uöåº@­yö ­´ÿ	òÞÙþkŸñw#éty£àDÕ(æòž˜ú'²ù!]‰[]‘BÒßY¸ªé‚¼[{p@®°îsíæ+ä9Öm<^9¾O»hƒ«"«½RX`­®É¦LÙ´ÈJÁ8Ñ÷üx8úé„I#Ò¡¹œŽµ’ó×ó¶ç^_è™øwóÁ¹ÖÏíÀ^2t‘-®Î%
}K©œ0Hj퐅&3ЍHw\7‚¸ÿÛè3ß§ÝLf³ƒÙ,ݵ~ÚϤȓÝDV£’©ÛG—z—ÿ?­} ¹Cn
− .git/objects/fe/46fa3927ab0bca60de756912a6d427b030a784

binary file changed (179 → absent bytes)

− .git/objects/fe/f7206a98cfe55dcb825c24d91f8179fa26d8ab

binary file changed (593 → absent bytes)

− .git/objects/ff/6a9f5d733cd98051951968bb686e9766cf0a44

binary file changed (960 → absent bytes)

+ .git/objects/pack/pack-8d5add9960807749627b85586af48b5f93746c56.idx view

binary file changed (absent → 8632 bytes)

+ .git/objects/pack/pack-8d5add9960807749627b85586af48b5f93746c56.pack view

binary file changed (absent → 63400 bytes)

+ .git/packed-refs view
@@ -0,0 +1,3 @@+# pack-refs with: peeled fully-peeled +4c2353910734c89633d869f0ffccf8f565c93221 refs/remotes/origin/gh-pages+fcf776ea249603cba21a7e735ac877482693b3e1 refs/remotes/origin/master
.git/refs/heads/master view
@@ -1,1 +1,1 @@-cec17859d0a08acd01b9297297b32881bc4f7104+26aa433ce02a16e4f0887189d56ca66cc0fab283
+ .git/refs/remotes/origin/HEAD view
@@ -0,0 +1,1 @@+ref: refs/remotes/origin/master
− .git/refs/remotes/origin/gh-pages
@@ -1,1 +0,0 @@-4c2353910734c89633d869f0ffccf8f565c93221
.git/refs/remotes/origin/master view
@@ -1,1 +1,1 @@-cec17859d0a08acd01b9297297b32881bc4f7104+26aa433ce02a16e4f0887189d56ca66cc0fab283
− .gitignore~
@@ -1,6 +0,0 @@-*.hi
-*.o
-example
-dist
-docs
-gendocs.sh
Ketchup.cabal view
@@ -1,5 +1,5 @@ Name:           Ketchup
-Version:        0.4.1
+Version:        0.4.2
 Cabal-Version:  >= 1.6
 Build-Type:     Simple
 License:        MIT
@@ -10,7 +10,7 @@ Category:       Web, Ketchup
 Synopsis:       A super small web framework for those who don't like big and fancy codebases
 Description:
-    Ketchup is a very small HTTP server implementation, currently under 400 LoC total!
+    Ketchup is a very small HTTP server implementation, currently under 400 LoC (for the whole thing)!
     .
     Ketchup is also made to be as modular and embeddable as possible, if you want a cabal-free Haskell app, just take those two/three files you need and put it in your project!
     .
@@ -18,9 +18,9 @@     .
     * Basic httpd functionality (IPV4 only for now)
     .
-    * URL Routing with parameters (ie. \`/user/:name/\`)
+    * URL Routing with parameters (ie. \/user\/:name\/)
     .
-    * Static file handler (ie. \`static \".\"\` as route/handler)
+    * Static file handler (ie. static \".\" as route/handler)
     .
     * Basic Auth (please use it over a HTTPS reverse proxy)
     .
− Ketchup.cabal~
@@ -1,62 +0,0 @@-Name:           Ketchup
-Version:        0.4.0
-Cabal-Version:  >= 1.6
-Build-Type:     Simple
-License:        MIT
-License-File:   LICENSE
-Author:         Alessandro Gatti
-Maintainer:     zikyky@gmail.com
-Homepage:       https://github.com/Hamcha/Ketchup
-Category:       Web, Ketchup
-Synopsis:       A super small web framework for those who don't like big and fancy codebases
-Description:
-    Ketchup is a very small HTTP server implementation, currently under 400 LoC total!
-    .
-    Ketchup is also made to be as modular and embeddable as possible, if you want a cabal-free Haskell app, just take those two/three files you need and put it in your project!
-    .
-    Currently Ketchup comes with:
-    .
-    * Basic httpd functionality (IPV4 only for now)
-    .
-    * URL Routing with parameters (ie. \`/user/:name/\`)
-    .
-    * Static file handler (ie. \`static \".\"\` as route/handler)
-    .
-    * Basic Auth (please use it over a HTTPS reverse proxy)
-    .
-    Dependencies
-    .
-    The core parts of Ketchup are all depedency free, that includes Ketchup.Httpd and Ketchup.Utils (and to a certain extent, Ketchup.Chunked).
-    The dependencies required are for the following modules:
-    .
-    * Ketchup.Static (uses mime-types)
-    .
-    * Ketchup.Auth (uses base64-bytestring)
-    .
-
-Extra-Source-Files:
-  example.hs,
-  LICENSE,
-  README.md
-
-Library
-  Exposed-Modules:
-    Ketchup.Auth
-    Ketchup.Chunked
-    Ketchup.Httpd
-    Ketchup.Routing
-    Ketchup.Static
-    Ketchup.Utils
-
-  Build-Depends:
-    base               ==4.*,
-    base64-bytestring   <1.1.0.0,
-    bytestring         >=0.9 && <0.11,
-    directory           <1.3,
-    mime-types          <0.2,
-    network             <2.5,
-    text                <2.0
-
-Source-Repository head
-  type:       git
-  location:   git://github.com/Hamcha/Ketchup.git
− Ketchup/Auth.hi

binary file changed (1502 → absent bytes)

− Ketchup/Auth.o

binary file changed (12392 → absent bytes)

− Ketchup/Chunked.hi

binary file changed (1681 → absent bytes)

− Ketchup/Chunked.o

binary file changed (13656 → absent bytes)

− Ketchup/Httpd.hi

binary file changed (2571 → absent bytes)

Ketchup/Httpd.hs view
@@ -36,14 +36,6 @@     values   = B.split ',' $ (trim . last) items
     items    = B.split ':' line
 
--- Parses request body
-parseRequestBody :: B.ByteString -> [(B.ByteString, B.ByteString)]
-parseRequestBody body =
-    map sep items
-    where
-    sep   = breakBS "="
-    items = B.split '&' body
-
 -- Gets all request lines
 getRequest :: Socket -> IO ([B.ByteString], B.ByteString)
 getRequest client = do
@@ -58,8 +50,7 @@     where
     [met, ur, ver] = B.words $ head headers -- First line is METHOD URI VERSION
     heads   = map parseRequestLine $ tail headers
-    body    = snd reqlines
-    headers = fst reqlines
+    (body, headers) = reqlines
 
 -- Handles each client request
 handleRequest :: Socket -> Handler -> IO ()
@@ -79,12 +70,10 @@ 
 -- Creates Acceptor pools
 createAcceptorPool :: Socket -> Int -> Handler -> IO ()
-createAcceptorPool sock max cback =
-    case max of
-        0 -> acceptAll sock cback
-        x -> do
-            forkIO $ acceptAll sock cback
-            createAcceptorPool sock (x-1) cback
+createAcceptorPool sock 0   cback = acceptAll sock cback
+createAcceptorPool sock max cback = do
+    forkIO (acceptAll sock cback)
+    createAcceptorPool sock (max-1) cback
 
 -- Gets host from hostname string
 getHostaddr :: String -> IO NS.HostAddress
− Ketchup/Httpd.o

binary file changed (42304 → absent bytes)

− Ketchup/Routing.hi

binary file changed (2332 → absent bytes)

Ketchup/Routing.hs view
@@ -27,9 +27,7 @@     | isMatch   = (snd r) handle request (get params)
     | otherwise = route routes handle request
     where
-    isMatch = fst matched
-    params  = snd matched
-    matched = (fst r) (uri request)
+    (isMatch, params) = (fst r) (uri request)
 
 -- |Wrap a handler in a route
 -- Lets you use a handler (no parameters) as a route
@@ -41,9 +39,7 @@ match template url =
     (isMatch, Parameters params)
     where
-    isMatch  = fst parsed
-    params   = snd parsed
-    parsed   = parse urlparts temparts []
+    (isMatch, params) = parse urlparts temparts []
     urlparts = B.split '/' url
     temparts = B.split '/' template
 
− Ketchup/Routing.o

binary file changed (20128 → absent bytes)

− Ketchup/Static.hi

binary file changed (1990 → absent bytes)

Ketchup/Static.hs view
@@ -15,23 +15,23 @@ -- Takes a directory and returns a route static :: B.ByteString -- ^ Path to serve static files from           -> Handler-static folder hnd req = do-    let path = B.concat [folder, uri req]-    let sane = sanecheck path-    let strPath = B.unpack path-    doesExist <- doesFileExist strPath-    case and [sane, doesExist] of-        True  -> B.readFile strPath-                 >>= sendReply hnd 200 [("Content-Type",[mime])]-                 where-                 mime = defaultMimeLookup $ decodeUtf8 fname-                 fname = last $ B.split '/' path-        False -> sendNotFound hnd+static folder hnd req =+    doesFileExist strPath+    >>= \exists ->+        case and [sanecheck path, exists] of+            False -> sendNotFound hnd+            True  -> B.readFile strPath+                     >>= sendReply hnd 200 [("Content-Type",[mime])]+                     where+                     mime = defaultMimeLookup $ decodeUtf8 fname+                     fname = last $ B.split '/' path+    where+    strPath = B.unpack path+    path    = B.concat [folder, uri req]  sanecheck :: B.ByteString -> Bool sanecheck url =-    and checks+    and [parentcheck]     where-    checks = [parentcheck]     parentcheck = length (filter (== "..") pieces) < 1     pieces = B.split '/' url
− Ketchup/Static.o

binary file changed (11208 → absent bytes)

− Ketchup/Utils.hi

binary file changed (2218 → absent bytes)

Ketchup/Utils.hs view
@@ -22,37 +22,34 @@ -- Returns status message from a given status id
 statusMsg :: Int          -- ^ Status code (ex. 404)
           -> B.ByteString -- ^ Status message (ex. "404 Not Found")
-statusMsg stat
-    -- 200 Success
-    | stat == 200 = "200 OK"
-    | stat == 201 = "201 Created"
-    | stat == 204 = "204 No Content"
-    -- 400 Client Errors
-    | stat == 400 = "400 Bad Request"
-    | stat == 401 = "401 Unauthorized"
-    | stat == 402 = "402 Payment Required"
-    | stat == 403 = "403 Forbidden"
-    | stat == 404 = "404 Not Found"
-    | stat == 405 = "405 Method Not Allowed"
-    | stat == 410 = "410 Gone"
-    -- 500 Server Errors
-    | stat == 500 = "500 Internal Server Error"
-    | stat == 501 = "501 Not Implemented"
-    | stat == 502 = "502 Bad Gateway"
-    | stat == 503 = "503 Service Unavailable"
-    | otherwise   = "500 Internal Server Error"
-
--- Premade HTTP replies
+-- 200 Success
+statusMsg 200 = "200 OK"
+statusMsg 201 = "201 Created"
+statusMsg 204 = "204 No Content"
+-- 400 Client Errors
+statusMsg 400 = "400 Bad Request"
+statusMsg 401 = "401 Unauthorized"
+statusMsg 402 = "402 Payment Required"
+statusMsg 403 = "403 Forbidden"
+statusMsg 404 = "404 Not Found"
+statusMsg 405 = "405 Method Not Allowed"
+statusMsg 410 = "410 Gone"
+-- 500 Server Errors
+statusMsg 500 = "500 Internal Server Error"
+statusMsg 501 = "501 Not Implemented"
+statusMsg 502 = "502 Bad Gateway"
+statusMsg 503 = "503 Service Unavailable"
+statusMsg x   = "500 Internal Server Error"
 
 -- |Send 400 Bad Request error
 sendBadRequest :: Socket -> IO ()
 sendBadRequest client =
-    sendReply client 400 [("Content-Type",["text/plain"])] "400 Bad Request!\n"
+    sendReply client 400 [("Content-Type",["text/plain"])] "400 Bad Request\n"
 
 -- |Send 404 Not Found error
 sendNotFound :: Socket -> IO ()
 sendNotFound client =
-    sendReply client 404 [("Content-Type",["text/plain"])] "404 Not Found!\n"
+    sendReply client 404 [("Content-Type",["text/plain"])] "404 Not Found\n"
 
 -- |Send a HTTP reply
 -- Sends a reply with the given parameters
@@ -64,20 +61,18 @@ sendReply client status headers body =
     sendAll client reply
     where
-    reply = B.concat
-        [ "HTTP/1.1 ", statusMsg status,"\r\n"
-        , "Content-Length: ", B.pack $ show $ B.length body, "\r\n"
-        , "Connection: close\r\n", heads, "\r\n", body]
+    reply = B.concat [ "HTTP/1.1 ", statusMsg status,"\r\n"
+                     , "Content-Length: ", B.pack $ show $ B.length body, "\r\n"
+                     , "Connection: close\r\n", heads, "\r\n", body]
     -- Turn ("a", ["b", "c"]) headers into "a: b,c"
-    heads = B.concat $ map toHeader headers
-    toHeader x = B.concat [fst x, ": "
-                          ,B.concat $ List.intersperse "," $ snd x
-                          ,"\r\n"]
+    heads      = B.concat $ map toHeader headers
+    toHeader x = B.concat [ fst x, ": "
+                          , B.concat $ List.intersperse "," $ snd x
+                          , "\r\n"]
 
 -- |Trim whitespace from headers
 trim :: B.ByteString -> B.ByteString
-trim = f . f
-    where f = B.reverse . B.dropWhile isSpace
+trim = f . f where f = B.reverse . B.dropWhile isSpace
 
 -- |ByteString breakSubstring wrapper that drops delimiters
 breakBS :: B.ByteString -> B.ByteString -> (B.ByteString, B.ByteString)
@@ -98,5 +93,5 @@ 
 -- |Maybe a -> a with fallback (if Nothing)
 fallback :: Maybe a -> a -> a
-fallback (Just value) fallback = value
-fallback Nothing      fallback = fallback+fallback (Just x) fallback = x
+fallback Nothing  fallback = fallback
− Ketchup/Utils.o

binary file changed (36072 → absent bytes)

− docs/.git/COMMIT_EDITMSG
@@ -1,221 +0,0 @@-Updated docs to 0.3-# Please enter the commit message for your changes. Lines starting-# with '#' will be ignored, and an empty message aborts the commit.-# On branch gh-pages-# Your branch is up-to-date with 'origin/gh-pages'.-#-# Changes to be committed:-#	new file:   Ketchup-Auth.html-#	modified:   Ketchup-Httpd.html-#	modified:   Ketchup-Routing.html-#	modified:   Ketchup-Utils.html-#	modified:   doc-index.html-#	modified:   index-frames.html-#	modified:   index.html-#	modified:   main.txt-#	new file:   mini_Ketchup-Auth.html-#	modified:   mini_Ketchup-Routing.html-#	modified:   mini_Ketchup-Utils.html-#-# ------------------------ >8 -------------------------# Do not touch the line above.-# Everything below will be removed.-diff --git a/Ketchup-Auth.html b/Ketchup-Auth.html-new file mode 100644-index 0000000..ff6a9f5---- /dev/null-+++ b/Ketchup-Auth.html-@@ -0,0 +1,8 @@-+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Auth</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-+window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Auth.html");};-+//]]>-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Auth</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:basicAuth">basicAuth</a> &#8759; [(ByteString, ByteString)] &#8594; ByteString &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:basicAuth" class="def">basicAuth</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; [(ByteString, ByteString)]</td><td class="doc"><p>List of (Username, Password)-+</p></td></tr><tr><td class="src">&#8594; ByteString</td><td class="doc"><p>Authentication Realm-+</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc"><p>Success Handler-+</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Performs HTTP Basic Auth-+</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>-\ No newline at end of file-diff --git a/Ketchup-Httpd.html b/Ketchup-Httpd.html-index b5c49f7..5c7dd67 100644---- a/Ketchup-Httpd.html-+++ b/Ketchup-Httpd.html-@@ -1,14 +1,14 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Httpd</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Httpd.html");};- //]]>--</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Httpd</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:HTTPRequest">HTTPRequest</a>  = <a href="#v:HTTPRequest">HTTPRequest</a> {<ul class="subs"><li><a href="#v:method">method</a> &#8759; ByteString</li><li><a href="#v:uri">uri</a> &#8759; ByteString</li><li><a href="#v:httpver">httpver</a> &#8759; ByteString</li><li><a href="#v:headers">headers</a> &#8759; <a href="Ketchup-Httpd.html#t:Headers">Headers</a></li><li><a href="#v:body">body</a> &#8759; ByteString</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:Headers">Headers</a> = Map ByteString [ByteString]</li><li class="src short"><span class="keyword">type</span> <a href="#t:Handler">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</li><li class="src short"><a href="#v:listenHTTP">listenHTTP</a> &#8759; String &#8594; PortNumber &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; IO ()</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:HTTPRequest" class="def">HTTPRequest</a>  </p><div class="doc"><p>HTTP Request type-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Httpd</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:HTTPRequest">HTTPRequest</a>  = <a href="#v:HTTPRequest">HTTPRequest</a> {<ul class="subs"><li><a href="#v:method">method</a> &#8759; ByteString</li><li><a href="#v:uri">uri</a> &#8759; ByteString</li><li><a href="#v:httpver">httpver</a> &#8759; ByteString</li><li><a href="#v:headers">headers</a> &#8759; <a href="Ketchup-Httpd.html#t:Headers">Headers</a></li><li><a href="#v:body">body</a> &#8759; ByteString</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:Headers">Headers</a> = [(ByteString, [ByteString])]</li><li class="src short"><span class="keyword">type</span> <a href="#t:Handler">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</li><li class="src short"><a href="#v:listenHTTP">listenHTTP</a> &#8759; String &#8594; PortNumber &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; IO ()</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:HTTPRequest" class="def">HTTPRequest</a>  </p><div class="doc"><p>HTTP Request type-  This holds a complete HTTP request- </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:HTTPRequest" class="def">HTTPRequest</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:method" class="def">method</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Request Method (GET, POST etc.)- </p></dd><dt class="src"><a name="v:uri" class="def">uri</a> &#8759; ByteString</dt><dd class="doc"><p>Get Request URI- </p></dd><dt class="src"><a name="v:httpver" class="def">httpver</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Version- </p></dd><dt class="src"><a name="v:headers" class="def">headers</a> &#8759; <a href="Ketchup-Httpd.html#t:Headers">Headers</a></dt><dd class="doc"><p>Get HTTP Headers (header, [values])- </p></dd><dt class="src"><a name="v:body" class="def">body</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Post body (raw string)--</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:HTTPRequest" class="caption collapser" onclick="toggleSection('i:HTTPRequest')">Instances</p><div id="section.i:HTTPRequest" class="show"><table><tr><td class="src">Show <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Headers" class="def">Headers</a> = Map ByteString [ByteString]</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Handler" class="def">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</p></div><div class="top"><p class="src"><a name="v:listenHTTP" class="def">listenHTTP</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; String</td><td class="doc"><p>Address to bind (ie. <a href="*.html">*</a>)-+</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:HTTPRequest" class="caption collapser" onclick="toggleSection('i:HTTPRequest')">Instances</p><div id="section.i:HTTPRequest" class="show"><table><tr><td class="src">Show <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Headers" class="def">Headers</a> = [(ByteString, [ByteString])]</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Handler" class="def">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</p></div><div class="top"><p class="src"><a name="v:listenHTTP" class="def">listenHTTP</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; String</td><td class="doc"><p>Address to bind (ie. <a href="*.html">*</a>)- </p></td></tr><tr><td class="src">&#8594; PortNumber</td><td class="doc"><p>Port to listen on- </p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc"><p>Route function to call- </p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Listens for incoming HTTP request-diff --git a/Ketchup-Routing.html b/Ketchup-Routing.html-index c8298c8..6350f4f 100644---- a/Ketchup-Routing.html-+++ b/Ketchup-Routing.html-@@ -1,7 +1,7 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Routing</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Routing.html");};- //]]>--</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Routing</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:Route">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; <a href="Ketchup-Routing.html#t:Parameters">Parameters</a> &#8594; IO ()</li><li class="src short"><span class="keyword">type</span> <a href="#t:Parameters">Parameters</a> = Map ByteString ByteString</li><li class="src short"><a href="#v:route">route</a> &#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)] &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li><li class="src short"><a href="#v:useHandler">useHandler</a> &#8759; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Routing.html#t:Route">Route</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Route" class="def">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; <a href="Ketchup-Routing.html#t:Parameters">Parameters</a> &#8594; IO ()</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Parameters" class="def">Parameters</a> = Map ByteString ByteString</p></div><div class="top"><p class="src"><a name="v:route" class="def">route</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)]</td><td class="doc"><p>Routes-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Routing</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:Route">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; (ByteString &#8594; Maybe ByteString) &#8594; IO ()</li><li class="src short"><a href="#v:route">route</a> &#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)] &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li><li class="src short"><a href="#v:useHandler">useHandler</a> &#8759; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Routing.html#t:Route">Route</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Route" class="def">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; (ByteString &#8594; Maybe ByteString) &#8594; IO ()</p></div><div class="top"><p class="src"><a name="v:route" class="def">route</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)]</td><td class="doc"><p>Routes- </p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Router function-  Takes a list of routes and iterates through them for every requeust- </p></div></div><div class="top"><p class="src"><a name="v:useHandler" class="def">useHandler</a> &#8759; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Routing.html#t:Route">Route</a></p><div class="doc"><p>Wrap a handler in a route-diff --git a/Ketchup-Utils.html b/Ketchup-Utils.html-index d7b0897..0ef0bb4 100644---- a/Ketchup-Utils.html-+++ b/Ketchup-Utils.html-@@ -1,9 +1,9 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Utils.html");};- //]]>--</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Utils</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:trim">trim</a> &#8759; ByteString &#8594; ByteString</li><li class="src short"><a href="#v:breakBS">breakBS</a> &#8759; ByteString &#8594; ByteString &#8594; (ByteString, ByteString)</li><li class="src short"><a href="#v:parseBody">parseBody</a> &#8759; ByteString &#8594; Map ByteString ByteString</li><li class="src short"><a href="#v:sendReply">sendReply</a> &#8759; Socket &#8594; Int &#8594; [(ByteString, [ByteString])] &#8594; ByteString &#8594; IO ()</li><li class="src short"><a href="#v:sendBadRequest">sendBadRequest</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:sendNotFound">sendNotFound</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:statusMsg">statusMsg</a> &#8759; Int &#8594; ByteString</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:trim" class="def">trim</a> &#8759; ByteString &#8594; ByteString</p><div class="doc"><p>Trim whitespace from headers-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Utils</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:trim">trim</a> &#8759; ByteString &#8594; ByteString</li><li class="src short"><a href="#v:breakBS">breakBS</a> &#8759; ByteString &#8594; ByteString &#8594; (ByteString, ByteString)</li><li class="src short"><a href="#v:fallback">fallback</a> &#8759;  Maybe a &#8594; a &#8594; a</li><li class="src short"><a href="#v:parseBody">parseBody</a> &#8759; ByteString &#8594; [(ByteString, ByteString)]</li><li class="src short"><a href="#v:sendReply">sendReply</a> &#8759; Socket &#8594; Int &#8594; [(ByteString, [ByteString])] &#8594; ByteString &#8594; IO ()</li><li class="src short"><a href="#v:sendBadRequest">sendBadRequest</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:sendNotFound">sendNotFound</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:statusMsg">statusMsg</a> &#8759; Int &#8594; ByteString</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:trim" class="def">trim</a> &#8759; ByteString &#8594; ByteString</p><div class="doc"><p>Trim whitespace from headers- </p></div></div><div class="top"><p class="src"><a name="v:breakBS" class="def">breakBS</a> &#8759; ByteString &#8594; ByteString &#8594; (ByteString, ByteString)</p><div class="doc"><p>ByteString breakSubstring wrapper that drops delimiters--</p></div></div><div class="top"><p class="src"><a name="v:parseBody" class="def">parseBody</a> &#8759; ByteString &#8594; Map ByteString ByteString</p><div class="doc"><p>Parse a URL-encoded Request-+</p></div></div><div class="top"><p class="src"><a name="v:fallback" class="def">fallback</a> &#8759;  Maybe a &#8594; a &#8594; a</p></div><div class="top"><p class="src"><a name="v:parseBody" class="def">parseBody</a> &#8759; ByteString &#8594; [(ByteString, ByteString)]</p><div class="doc"><p>Parse a URL-encoded Request- </p></div></div><div class="top"><p class="src"><a name="v:sendReply" class="def">sendReply</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Socket</td><td class="doc"><p>Socket to write to- </p></td></tr><tr><td class="src">&#8594; Int</td><td class="doc"><p>Status Code to send- </p></td></tr><tr><td class="src">&#8594; [(ByteString, [ByteString])]</td><td class="doc"><p>HTTP headers (<a href="Header.html">Header</a>,[<a href="value1.html">value1</a>, <a href="value2.html">value2</a>])-diff --git a/doc-index.html b/doc-index.html-index ad296ab..e5dc6ab 100644---- a/doc-index.html-+++ b/doc-index.html-@@ -1,4 +1,4 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title> (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();};- //]]>--</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">body</td><td class="module"><a href="Ketchup-Httpd.html#v:body">Ketchup.Httpd</a></td></tr><tr><td class="src">breakBS</td><td class="module"><a href="Ketchup-Utils.html#v:breakBS">Ketchup.Utils</a></td></tr><tr><td class="src">chunk</td><td class="module"><a href="Ketchup-Chunked.html#v:chunk">Ketchup.Chunked</a></td></tr><tr><td class="src">chunkHeaders</td><td class="module"><a href="Ketchup-Chunked.html#v:chunkHeaders">Ketchup.Chunked</a></td></tr><tr><td class="src">endchunk</td><td class="module"><a href="Ketchup-Chunked.html#v:endchunk">Ketchup.Chunked</a></td></tr><tr><td class="src">Handler</td><td class="module"><a href="Ketchup-Httpd.html#t:Handler">Ketchup.Httpd</a></td></tr><tr><td class="src">Headers</td><td class="module"><a href="Ketchup-Httpd.html#t:Headers">Ketchup.Httpd</a></td></tr><tr><td class="src">headers</td><td class="module"><a href="Ketchup-Httpd.html#v:headers">Ketchup.Httpd</a></td></tr><tr><td class="src">HTTPRequest</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ketchup-Httpd.html#t:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ketchup-Httpd.html#v:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="src">httpver</td><td class="module"><a href="Ketchup-Httpd.html#v:httpver">Ketchup.Httpd</a></td></tr><tr><td class="src">listenHTTP</td><td class="module"><a href="Ketchup-Httpd.html#v:listenHTTP">Ketchup.Httpd</a></td></tr><tr><td class="src">method</td><td class="module"><a href="Ketchup-Httpd.html#v:method">Ketchup.Httpd</a></td></tr><tr><td class="src">Parameters</td><td class="module"><a href="Ketchup-Routing.html#t:Parameters">Ketchup.Routing</a></td></tr><tr><td class="src">parseBody</td><td class="module"><a href="Ketchup-Utils.html#v:parseBody">Ketchup.Utils</a></td></tr><tr><td class="src">Route</td><td class="module"><a href="Ketchup-Routing.html#t:Route">Ketchup.Routing</a></td></tr><tr><td class="src">route</td><td class="module"><a href="Ketchup-Routing.html#v:route">Ketchup.Routing</a></td></tr><tr><td class="src">sendBadRequest</td><td class="module"><a href="Ketchup-Utils.html#v:sendBadRequest">Ketchup.Utils</a></td></tr><tr><td class="src">sendNotFound</td><td class="module"><a href="Ketchup-Utils.html#v:sendNotFound">Ketchup.Utils</a></td></tr><tr><td class="src">sendReply</td><td class="module"><a href="Ketchup-Utils.html#v:sendReply">Ketchup.Utils</a></td></tr><tr><td class="src">static</td><td class="module"><a href="Ketchup-Static.html#v:static">Ketchup.Static</a></td></tr><tr><td class="src">statusMsg</td><td class="module"><a href="Ketchup-Utils.html#v:statusMsg">Ketchup.Utils</a></td></tr><tr><td class="src">trim</td><td class="module"><a href="Ketchup-Utils.html#v:trim">Ketchup.Utils</a></td></tr><tr><td class="src">uri</td><td class="module"><a href="Ketchup-Httpd.html#v:uri">Ketchup.Httpd</a></td></tr><tr><td class="src">useHandler</td><td class="module"><a href="Ketchup-Routing.html#v:useHandler">Ketchup.Routing</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>-\ No newline at end of file-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">basicAuth</td><td class="module"><a href="Ketchup-Auth.html#v:basicAuth">Ketchup.Auth</a></td></tr><tr><td class="src">body</td><td class="module"><a href="Ketchup-Httpd.html#v:body">Ketchup.Httpd</a></td></tr><tr><td class="src">breakBS</td><td class="module"><a href="Ketchup-Utils.html#v:breakBS">Ketchup.Utils</a></td></tr><tr><td class="src">chunk</td><td class="module"><a href="Ketchup-Chunked.html#v:chunk">Ketchup.Chunked</a></td></tr><tr><td class="src">chunkHeaders</td><td class="module"><a href="Ketchup-Chunked.html#v:chunkHeaders">Ketchup.Chunked</a></td></tr><tr><td class="src">endchunk</td><td class="module"><a href="Ketchup-Chunked.html#v:endchunk">Ketchup.Chunked</a></td></tr><tr><td class="src">fallback</td><td class="module"><a href="Ketchup-Utils.html#v:fallback">Ketchup.Utils</a></td></tr><tr><td class="src">Handler</td><td class="module"><a href="Ketchup-Httpd.html#t:Handler">Ketchup.Httpd</a></td></tr><tr><td class="src">Headers</td><td class="module"><a href="Ketchup-Httpd.html#t:Headers">Ketchup.Httpd</a></td></tr><tr><td class="src">headers</td><td class="module"><a href="Ketchup-Httpd.html#v:headers">Ketchup.Httpd</a></td></tr><tr><td class="src">HTTPRequest</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ketchup-Httpd.html#t:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ketchup-Httpd.html#v:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="src">httpver</td><td class="module"><a href="Ketchup-Httpd.html#v:httpver">Ketchup.Httpd</a></td></tr><tr><td class="src">listenHTTP</td><td class="module"><a href="Ketchup-Httpd.html#v:listenHTTP">Ketchup.Httpd</a></td></tr><tr><td class="src">method</td><td class="module"><a href="Ketchup-Httpd.html#v:method">Ketchup.Httpd</a></td></tr><tr><td class="src">parseBody</td><td class="module"><a href="Ketchup-Utils.html#v:parseBody">Ketchup.Utils</a></td></tr><tr><td class="src">Route</td><td class="module"><a href="Ketchup-Routing.html#t:Route">Ketchup.Routing</a></td></tr><tr><td class="src">route</td><td class="module"><a href="Ketchup-Routing.html#v:route">Ketchup.Routing</a></td></tr><tr><td class="src">sendBadRequest</td><td class="module"><a href="Ketchup-Utils.html#v:sendBadRequest">Ketchup.Utils</a></td></tr><tr><td class="src">sendNotFound</td><td class="module"><a href="Ketchup-Utils.html#v:sendNotFound">Ketchup.Utils</a></td></tr><tr><td class="src">sendReply</td><td class="module"><a href="Ketchup-Utils.html#v:sendReply">Ketchup.Utils</a></td></tr><tr><td class="src">static</td><td class="module"><a href="Ketchup-Static.html#v:static">Ketchup.Static</a></td></tr><tr><td class="src">statusMsg</td><td class="module"><a href="Ketchup-Utils.html#v:statusMsg">Ketchup.Utils</a></td></tr><tr><td class="src">trim</td><td class="module"><a href="Ketchup-Utils.html#v:trim">Ketchup.Utils</a></td></tr><tr><td class="src">uri</td><td class="module"><a href="Ketchup-Httpd.html#v:uri">Ketchup.Httpd</a></td></tr><tr><td class="src">useHandler</td><td class="module"><a href="Ketchup-Routing.html#v:useHandler">Ketchup.Routing</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>-\ No newline at end of file-diff --git a/index-frames.html b/index-frames.html-index 9de2c9d..8766065 100644---- a/index-frames.html-+++ b/index-frames.html-@@ -1,4 +1,4 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();};- //]]>--</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Ketchup-Chunked.html" target="main">Ketchup.Chunked</a></li><li class="module"><a href="Ketchup-Httpd.html" target="main">Ketchup.Httpd</a></li><li class="module"><a href="Ketchup-Routing.html" target="main">Ketchup.Routing</a></li><li class="module"><a href="Ketchup-Static.html" target="main">Ketchup.Static</a></li><li class="module"><a href="Ketchup-Utils.html" target="main">Ketchup.Utils</a></li></ul></div></body></html>-\ No newline at end of file-+</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Ketchup-Auth.html" target="main">Ketchup.Auth</a></li><li class="module"><a href="Ketchup-Chunked.html" target="main">Ketchup.Chunked</a></li><li class="module"><a href="Ketchup-Httpd.html" target="main">Ketchup.Httpd</a></li><li class="module"><a href="Ketchup-Routing.html" target="main">Ketchup.Routing</a></li><li class="module"><a href="Ketchup-Static.html" target="main">Ketchup.Static</a></li><li class="module"><a href="Ketchup-Utils.html" target="main">Ketchup.Utils</a></li></ul></div></body></html>-\ No newline at end of file-diff --git a/index.html b/index.html-index 75be0ea..0427491 100644---- a/index.html-+++ b/index.html-@@ -1,4 +1,4 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();};- //]]>--</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Ketchup</span><ul id="section.n.1" class="show"><li><span class="module"><a href="Ketchup-Chunked.html">Ketchup.Chunked</a></span></li><li><span class="module"><a href="Ketchup-Httpd.html">Ketchup.Httpd</a></span></li><li><span class="module"><a href="Ketchup-Routing.html">Ketchup.Routing</a></span></li><li><span class="module"><a href="Ketchup-Static.html">Ketchup.Static</a></span></li><li><span class="module"><a href="Ketchup-Utils.html">Ketchup.Utils</a></span></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>-\ No newline at end of file-+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Ketchup</span><ul id="section.n.1" class="show"><li><span class="module"><a href="Ketchup-Auth.html">Ketchup.Auth</a></span></li><li><span class="module"><a href="Ketchup-Chunked.html">Ketchup.Chunked</a></span></li><li><span class="module"><a href="Ketchup-Httpd.html">Ketchup.Httpd</a></span></li><li><span class="module"><a href="Ketchup-Routing.html">Ketchup.Routing</a></span></li><li><span class="module"><a href="Ketchup-Static.html">Ketchup.Static</a></span></li><li><span class="module"><a href="Ketchup-Utils.html">Ketchup.Utils</a></span></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>-\ No newline at end of file-diff --git a/main.txt b/main.txt-index dab38cf..e8a9b10 100644---- a/main.txt-+++ b/main.txt-@@ -10,9 +10,10 @@ trim :: ByteString -> ByteString- - -- | ByteString breakSubstring wrapper that drops delimiters- breakBS :: ByteString -> ByteString -> (ByteString, ByteString)-+fallback :: Maybe a -> a -> a- - -- | Parse a URL-encoded Request--parseBody :: ByteString -> Map ByteString ByteString-+parseBody :: ByteString -> [(ByteString, ByteString)]- - -- | Send a HTTP reply Sends a reply with the given parameters- sendReply :: Socket -> Int -> [(ByteString, [ByteString])] -> ByteString -> IO ()-@@ -46,16 +47,26 @@ headers :: HTTPRequest -> Headers- - -- | Get HTTP Post body (raw string)- body :: HTTPRequest -> ByteString--type Headers = Map ByteString [ByteString]-+type Headers = [(ByteString, [ByteString])]- type Handler = Socket -> HTTPRequest -> IO ()- - -- | Listens for incoming HTTP request- listenHTTP :: String -> PortNumber -> Handler -> IO ()- instance Show HTTPRequest- -+module Ketchup.Chunked-+-+-- | Send HTTP reply headers and begin a Chunked transmission-+chunkHeaders :: Socket -> Int -> [(ByteString, [ByteString])] -> IO ()-+-+-- | Sends a chunk-+chunk :: Socket -> ByteString -> IO ()-+-+-- | Send the final/closing chunk-+endchunk :: Socket -> IO ()-+- module Ketchup.Routing--type Route = Socket -> HTTPRequest -> Parameters -> IO ()--type Parameters = Map ByteString ByteString-+type Route = Socket -> HTTPRequest -> (ByteString -> Maybe ByteString) -> IO ()- - -- | Router function Takes a list of routes and iterates through them for- --   every requeust-@@ -70,13 +81,7 @@ module Ketchup.Static- -- | Static file handler Takes a directory and returns a route- static :: ByteString -> Handler- --module Ketchup.Chunked------ | Send HTTP reply headers and begin a Chunked transmission--chunkHeaders :: Socket -> Int -> [(ByteString, [ByteString])] -> IO ()------ | Sends a chunk--chunk :: Socket -> ByteString -> IO ()-+module Ketchup.Auth- ---- | Send the final/closing chunk--endchunk :: Socket -> IO ()-+-- | Performs HTTP Basic Auth-+basicAuth :: [(ByteString, ByteString)] -> ByteString -> Handler -> Handler-diff --git a/mini_Ketchup-Auth.html b/mini_Ketchup-Auth.html-new file mode 100644-index 0000000..7015cd0---- /dev/null-+++ b/mini_Ketchup-Auth.html-@@ -0,0 +1,4 @@-+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Auth</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-+window.onload = function () {pageLoad();};-+//]]>-+</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Auth</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Auth.html#v:basicAuth" target="main">basicAuth</a></p></div></div></body></html>-\ No newline at end of file-diff --git a/mini_Ketchup-Routing.html b/mini_Ketchup-Routing.html-index a33f00a..f8b79cf 100644---- a/mini_Ketchup-Routing.html-+++ b/mini_Ketchup-Routing.html-@@ -1,4 +1,4 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Routing</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();};- //]]>--</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Routing</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Routing.html#t:Route" target="main">Route</a> </p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Routing.html#t:Parameters" target="main">Parameters</a> </p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:route" target="main">route</a></p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:useHandler" target="main">useHandler</a></p></div></div></body></html>-\ No newline at end of file-+</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Routing</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Routing.html#t:Route" target="main">Route</a> </p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:route" target="main">route</a></p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:useHandler" target="main">useHandler</a></p></div></div></body></html>-\ No newline at end of file-diff --git a/mini_Ketchup-Utils.html b/mini_Ketchup-Utils.html-index bfbd19d..cc746e2 100644---- a/mini_Ketchup-Utils.html-+++ b/mini_Ketchup-Utils.html-@@ -1,4 +1,4 @@- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[- window.onload = function () {pageLoad();};- //]]>--</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Utils</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:trim" target="main">trim</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:breakBS" target="main">breakBS</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:parseBody" target="main">parseBody</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendReply" target="main">sendReply</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendBadRequest" target="main">sendBadRequest</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendNotFound" target="main">sendNotFound</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:statusMsg" target="main">statusMsg</a></p></div></div></body></html>-\ No newline at end of file-+</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Utils</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:trim" target="main">trim</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:breakBS" target="main">breakBS</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:fallback" target="main">fallback</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:parseBody" target="main">parseBody</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendReply" target="main">sendReply</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendBadRequest" target="main">sendBadRequest</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendNotFound" target="main">sendNotFound</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:statusMsg" target="main">statusMsg</a></p></div></div></body></html>-\ No newline at end of file
− docs/.git/HEAD
@@ -1,1 +0,0 @@-ref: refs/heads/gh-pages
− docs/.git/config
@@ -1,11 +0,0 @@-[core]-	repositoryformatversion = 0-	filemode = true-	bare = false-	logallrefupdates = true-[remote "origin"]-	url = ssh://git@github.com/Hamcha/ketchup-	fetch = +refs/heads/*:refs/remotes/origin/*-[branch "gh-pages"]-	remote = origin-	merge = refs/heads/gh-pages
− docs/.git/config~
@@ -1,11 +0,0 @@-[core]-	repositoryformatversion = 0-	filemode = true-	bare = false-	logallrefupdates = true-[remote "origin"]-	url = https://github.com/Hamcha/ketchup-	fetch = +refs/heads/*:refs/remotes/origin/*-[branch "gh-pages"]-	remote = origin-	merge = refs/heads/gh-pages
− docs/.git/description
@@ -1,1 +0,0 @@-Unnamed repository; edit this file 'description' to name the repository.
− docs/.git/hooks/applypatch-msg.sample
@@ -1,15 +0,0 @@-#!/bin/sh-#-# An example hook script to check the commit log message taken by-# applypatch from an e-mail message.-#-# The hook should exit with non-zero status after issuing an-# appropriate message if it wants to stop the commit.  The hook is-# allowed to edit the commit message file.-#-# To enable this hook, rename this file to "applypatch-msg".--. git-sh-setup-test -x "$GIT_DIR/hooks/commit-msg" &&-	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}-:
− docs/.git/hooks/commit-msg.sample
@@ -1,24 +0,0 @@-#!/bin/sh-#-# An example hook script to check the commit log message.-# Called by "git commit" with one argument, the name of the file-# that has the commit message.  The hook should exit with non-zero-# status after issuing an appropriate message if it wants to stop the-# commit.  The hook is allowed to edit the commit message file.-#-# To enable this hook, rename this file to "commit-msg".--# Uncomment the below to add a Signed-off-by line to the message.-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg-# hook is more suited to it.-#-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"--# This example catches duplicate Signed-off-by lines.--test "" = "$(grep '^Signed-off-by: ' "$1" |-	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {-	echo >&2 Duplicate Signed-off-by lines.-	exit 1-}
− docs/.git/hooks/post-update.sample
@@ -1,8 +0,0 @@-#!/bin/sh-#-# An example hook script to prepare a packed repository for use over-# dumb transports.-#-# To enable this hook, rename this file to "post-update".--exec git update-server-info
− docs/.git/hooks/pre-applypatch.sample
@@ -1,14 +0,0 @@-#!/bin/sh-#-# An example hook script to verify what is about to be committed-# by applypatch from an e-mail message.-#-# The hook should exit with non-zero status after issuing an-# appropriate message if it wants to stop the commit.-#-# To enable this hook, rename this file to "pre-applypatch".--. git-sh-setup-test -x "$GIT_DIR/hooks/pre-commit" &&-	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}-:
− docs/.git/hooks/pre-commit.sample
@@ -1,49 +0,0 @@-#!/bin/sh-#-# An example hook script to verify what is about to be committed.-# Called by "git commit" with no arguments.  The hook should-# exit with non-zero status after issuing an appropriate message if-# it wants to stop the commit.-#-# To enable this hook, rename this file to "pre-commit".--if git rev-parse --verify HEAD >/dev/null 2>&1-then-	against=HEAD-else-	# Initial commit: diff against an empty tree object-	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904-fi--# If you want to allow non-ASCII filenames set this variable to true.-allownonascii=$(git config --bool hooks.allownonascii)--# Redirect output to stderr.-exec 1>&2--# Cross platform projects tend to avoid non-ASCII filenames; prevent-# them from being added to the repository. We exploit the fact that the-# printable range starts at the space character and ends with tilde.-if [ "$allownonascii" != "true" ] &&-	# Note that the use of brackets around a tr range is ok here, (it's-	# even required, for portability to Solaris 10's /usr/bin/tr), since-	# the square bracket bytes happen to fall in the designated range.-	test $(git diff --cached --name-only --diff-filter=A -z $against |-	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0-then-	cat <<\EOF-Error: Attempt to add a non-ASCII file name.--This can cause problems if you want to work with people on other platforms.--To be portable it is advisable to rename the file.--If you know what you are doing you can disable this check using:--  git config hooks.allownonascii true-EOF-	exit 1-fi--# If there are whitespace errors, print the offending file names and fail.-exec git diff-index --check --cached $against --
− docs/.git/hooks/pre-push.sample
@@ -1,54 +0,0 @@-#!/bin/sh--# An example hook script to verify what is about to be pushed.  Called by "git-# push" after it has checked the remote status, but before anything has been-# pushed.  If this script exits with a non-zero status nothing will be pushed.-#-# This hook is called with the following parameters:-#-# $1 -- Name of the remote to which the push is being done-# $2 -- URL to which the push is being done-#-# If pushing without using a named remote those arguments will be equal.-#-# Information about the commits which are being pushed is supplied as lines to-# the standard input in the form:-#-#   <local ref> <local sha1> <remote ref> <remote sha1>-#-# This sample shows how to prevent push of commits where the log message starts-# with "WIP" (work in progress).--remote="$1"-url="$2"--z40=0000000000000000000000000000000000000000--IFS=' '-while read local_ref local_sha remote_ref remote_sha-do-	if [ "$local_sha" = $z40 ]-	then-		# Handle delete-		:-	else-		if [ "$remote_sha" = $z40 ]-		then-			# New branch, examine all commits-			range="$local_sha"-		else-			# Update to existing branch, examine new commits-			range="$remote_sha..$local_sha"-		fi--		# Check for WIP commit-		commit=`git rev-list -n 1 --grep '^WIP' "$range"`-		if [ -n "$commit" ]-		then-			echo "Found WIP commit in $local_ref, not pushing"-			exit 1-		fi-	fi-done--exit 0
− docs/.git/hooks/pre-rebase.sample
@@ -1,169 +0,0 @@-#!/bin/sh-#-# Copyright (c) 2006, 2008 Junio C Hamano-#-# The "pre-rebase" hook is run just before "git rebase" starts doing-# its job, and can prevent the command from running by exiting with-# non-zero status.-#-# The hook is called with the following parameters:-#-# $1 -- the upstream the series was forked from.-# $2 -- the branch being rebased (or empty when rebasing the current branch).-#-# This sample shows how to prevent topic branches that are already-# merged to 'next' branch from getting rebased, because allowing it-# would result in rebasing already published history.--publish=next-basebranch="$1"-if test "$#" = 2-then-	topic="refs/heads/$2"-else-	topic=`git symbolic-ref HEAD` ||-	exit 0 ;# we do not interrupt rebasing detached HEAD-fi--case "$topic" in-refs/heads/??/*)-	;;-*)-	exit 0 ;# we do not interrupt others.-	;;-esac--# Now we are dealing with a topic branch being rebased-# on top of master.  Is it OK to rebase it?--# Does the topic really exist?-git show-ref -q "$topic" || {-	echo >&2 "No such branch $topic"-	exit 1-}--# Is topic fully merged to master?-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`-if test -z "$not_in_master"-then-	echo >&2 "$topic is fully merged to master; better remove it."-	exit 1 ;# we could allow it, but there is no point.-fi--# Is topic ever merged to next?  If so you should not be rebasing it.-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`-only_next_2=`git rev-list ^master           ${publish} | sort`-if test "$only_next_1" = "$only_next_2"-then-	not_in_topic=`git rev-list "^$topic" master`-	if test -z "$not_in_topic"-	then-		echo >&2 "$topic is already up-to-date with master"-		exit 1 ;# we could allow it, but there is no point.-	else-		exit 0-	fi-else-	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`-	/usr/local/bin/perl -e '-		my $topic = $ARGV[0];-		my $msg = "* $topic has commits already merged to public branch:\n";-		my (%not_in_next) = map {-			/^([0-9a-f]+) /;-			($1 => 1);-		} split(/\n/, $ARGV[1]);-		for my $elem (map {-				/^([0-9a-f]+) (.*)$/;-				[$1 => $2];-			} split(/\n/, $ARGV[2])) {-			if (!exists $not_in_next{$elem->[0]}) {-				if ($msg) {-					print STDERR $msg;-					undef $msg;-				}-				print STDERR " $elem->[1]\n";-			}-		}-	' "$topic" "$not_in_next" "$not_in_master"-	exit 1-fi--exit 0--################################################################--This sample hook safeguards topic branches that have been-published from being rewound.--The workflow assumed here is:-- * Once a topic branch forks from "master", "master" is never-   merged into it again (either directly or indirectly).-- * Once a topic branch is fully cooked and merged into "master",-   it is deleted.  If you need to build on top of it to correct-   earlier mistakes, a new topic branch is created by forking at-   the tip of the "master".  This is not strictly necessary, but-   it makes it easier to keep your history simple.-- * Whenever you need to test or publish your changes to topic-   branches, merge them into "next" branch.--The script, being an example, hardcodes the publish branch name-to be "next", but it is trivial to make it configurable via-$GIT_DIR/config mechanism.--With this workflow, you would want to know:--(1) ... if a topic branch has ever been merged to "next".  Young-    topic branches can have stupid mistakes you would rather-    clean up before publishing, and things that have not been-    merged into other branches can be easily rebased without-    affecting other people.  But once it is published, you would-    not want to rewind it.--(2) ... if a topic branch has been fully merged to "master".-    Then you can delete it.  More importantly, you should not-    build on top of it -- other people may already want to-    change things related to the topic as patches against your-    "master", so if you need further changes, it is better to-    fork the topic (perhaps with the same name) afresh from the-    tip of "master".--Let's look at this example:--		   o---o---o---o---o---o---o---o---o---o "next"-		  /       /           /           /-		 /   a---a---b A     /           /-		/   /               /           /-	       /   /   c---c---c---c B         /-	      /   /   /             \         /-	     /   /   /   b---b C     \       /-	    /   /   /   /             \     /-    ---o---o---o---o---o---o---o---o---o---o---o "master"---A, B and C are topic branches.-- * A has one fix since it was merged up to "next".-- * B has finished.  It has been fully merged up to "master" and "next",-   and is ready to be deleted.-- * C has not merged to "next" at all.--We would want to allow C to be rebased, refuse A, and encourage-B to be deleted.--To compute (1):--	git rev-list ^master ^topic next-	git rev-list ^master        next--	if these match, topic has not merged in next at all.--To compute (2):--	git rev-list master..topic--	if this is empty, it is fully merged to "master".
− docs/.git/hooks/prepare-commit-msg.sample
@@ -1,36 +0,0 @@-#!/bin/sh-#-# An example hook script to prepare the commit log message.-# Called by "git commit" with the name of the file that has the-# commit message, followed by the description of the commit-# message's source.  The hook's purpose is to edit the commit-# message file.  If the hook fails with a non-zero status,-# the commit is aborted.-#-# To enable this hook, rename this file to "prepare-commit-msg".--# This hook includes three examples.  The first comments out the-# "Conflicts:" part of a merge commit.-#-# The second includes the output of "git diff --name-status -r"-# into the message, just before the "git status" output.  It is-# commented because it doesn't cope with --amend or with squashed-# commits.-#-# The third example adds a Signed-off-by line to the message, that can-# still be edited.  This is rarely a good idea.--case "$2,$3" in-  merge,)-    /usr/local/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;--# ,|template,)-#   /usr/local/bin/perl -i.bak -pe '-#      print "\n" . `git diff --cached --name-status -r`-#	 if /^#/ && $first++ == 0' "$1" ;;--  *) ;;-esac--# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
− docs/.git/hooks/update.sample
@@ -1,128 +0,0 @@-#!/bin/sh-#-# An example hook script to blocks unannotated tags from entering.-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new-#-# To enable this hook, rename this file to "update".-#-# Config-# -------# hooks.allowunannotated-#   This boolean sets whether unannotated tags will be allowed into the-#   repository.  By default they won't be.-# hooks.allowdeletetag-#   This boolean sets whether deleting tags will be allowed in the-#   repository.  By default they won't be.-# hooks.allowmodifytag-#   This boolean sets whether a tag may be modified after creation. By default-#   it won't be.-# hooks.allowdeletebranch-#   This boolean sets whether deleting branches will be allowed in the-#   repository.  By default they won't be.-# hooks.denycreatebranch-#   This boolean sets whether remotely creating branches will be denied-#   in the repository.  By default this is allowed.-#--# --- Command line-refname="$1"-oldrev="$2"-newrev="$3"--# --- Safety check-if [ -z "$GIT_DIR" ]; then-	echo "Don't run this script from the command line." >&2-	echo " (if you want, you could supply GIT_DIR then run" >&2-	echo "  $0 <ref> <oldrev> <newrev>)" >&2-	exit 1-fi--if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then-	echo "usage: $0 <ref> <oldrev> <newrev>" >&2-	exit 1-fi--# --- Config-allowunannotated=$(git config --bool hooks.allowunannotated)-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)-denycreatebranch=$(git config --bool hooks.denycreatebranch)-allowdeletetag=$(git config --bool hooks.allowdeletetag)-allowmodifytag=$(git config --bool hooks.allowmodifytag)--# check for no description-projectdesc=$(sed -e '1q' "$GIT_DIR/description")-case "$projectdesc" in-"Unnamed repository"* | "")-	echo "*** Project description file hasn't been set" >&2-	exit 1-	;;-esac--# --- Check types-# if $newrev is 0000...0000, it's a commit to delete a ref.-zero="0000000000000000000000000000000000000000"-if [ "$newrev" = "$zero" ]; then-	newrev_type=delete-else-	newrev_type=$(git cat-file -t $newrev)-fi--case "$refname","$newrev_type" in-	refs/tags/*,commit)-		# un-annotated tag-		short_refname=${refname##refs/tags/}-		if [ "$allowunannotated" != "true" ]; then-			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2-			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2-			exit 1-		fi-		;;-	refs/tags/*,delete)-		# delete tag-		if [ "$allowdeletetag" != "true" ]; then-			echo "*** Deleting a tag is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/tags/*,tag)-		# annotated tag-		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1-		then-			echo "*** Tag '$refname' already exists." >&2-			echo "*** Modifying a tag is not allowed in this repository." >&2-			exit 1-		fi-		;;-	refs/heads/*,commit)-		# branch-		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then-			echo "*** Creating a branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/heads/*,delete)-		# delete branch-		if [ "$allowdeletebranch" != "true" ]; then-			echo "*** Deleting a branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/remotes/*,commit)-		# tracking branch-		;;-	refs/remotes/*,delete)-		# delete tracking branch-		if [ "$allowdeletebranch" != "true" ]; then-			echo "*** Deleting a tracking branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	*)-		# Anything else (is there anything else?)-		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2-		exit 1-		;;-esac--# --- Finished-exit 0
− docs/.git/index

binary file changed (1928 → absent bytes)

− docs/.git/info/exclude
@@ -1,6 +0,0 @@-# git ls-files --others --exclude-from=.git/info/exclude-# Lines that start with '#' are comments.-# For a project mostly in C, the following would be a good set of-# exclude patterns (uncomment them if you want to use them):-# *.[oa]-# *~
− docs/.git/logs/HEAD
@@ -1,3 +0,0 @@-0000000000000000000000000000000000000000 4ac44b6241517d43310da25b086e175b3b9c0b49 Hamcha <zikyky@gmail.com> 1404003477 +0200	clone: from https://github.com/Hamcha/ketchup-4ac44b6241517d43310da25b086e175b3b9c0b49 33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 Hamcha <zikyky@gmail.com> 1404003595 +0200	commit: Updated docs-33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 4c2353910734c89633d869f0ffccf8f565c93221 Hamcha <zikyky@gmail.com> 1404079702 +0200	commit: Updated docs to 0.3
− docs/.git/logs/refs/heads/gh-pages
@@ -1,3 +0,0 @@-0000000000000000000000000000000000000000 4ac44b6241517d43310da25b086e175b3b9c0b49 Hamcha <zikyky@gmail.com> 1404003477 +0200	clone: from https://github.com/Hamcha/ketchup-4ac44b6241517d43310da25b086e175b3b9c0b49 33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 Hamcha <zikyky@gmail.com> 1404003595 +0200	commit: Updated docs-33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 4c2353910734c89633d869f0ffccf8f565c93221 Hamcha <zikyky@gmail.com> 1404079702 +0200	commit: Updated docs to 0.3
− docs/.git/logs/refs/remotes/origin/HEAD
@@ -1,1 +0,0 @@-0000000000000000000000000000000000000000 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1404003477 +0200	clone: from https://github.com/Hamcha/ketchup
− docs/.git/logs/refs/remotes/origin/gh-pages
@@ -1,2 +0,0 @@-4ac44b6241517d43310da25b086e175b3b9c0b49 33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 Hamcha <zikyky@gmail.com> 1404003933 +0200	update by push-33d1dadf72d9a1c6217c5a6c7992dcdaaa343742 4c2353910734c89633d869f0ffccf8f565c93221 Hamcha <zikyky@gmail.com> 1404079711 +0200	update by push
− docs/.git/objects/04/27491eaa020186e459934ed69cdb7d808501cd
@@ -1,4 +0,0 @@-x”ßOÛ0Ç÷Ì_aü0à!ñJ…4ÖÄ+L Á@´Mˆ×1M¨k{±Óšö¿ïl(Ý&M}jz¾ûÜÝ×çI=B½ƒƒþ›lûørX|¿:A•›JtuûñülˆpBÈ×þãâ};-.ÎQ/}‡Š†)[»Z+&	9ù‚®œ3™Ïç鼟êfLŠk²ð¬žî>·™–®Ä4ùS©lþJïðð0{WÁJšM…cP¥3‰øÑÖ³µrB¹¤XÿrìÄÂO ^±Æ-—ߟ’÷š¹ÚIA3ÒýÊZMPՈ‡k.˜J¹µ5BæØº¥¶Âaä C!:Ǘ>$`-ojãm84ÃÊRóIÒºZ¦€[‰~d3}¡-¿hÖEÿϐlûnx|TÝmÍkUêyª•Ô¬D9zh÷÷v÷ÐOÃÆâì»{ƒ_ƒ-BîïéÖKUérI³²ž¡ºÌ±a|Q‰?
ÔÔJÄ%³p'^(>zËT¨dM3¸† #©—Óî2lFtæ½V=AdÕûÌG¾¸’VÒÌ<eæÌ„žÄÔ¸%¦oÕȚAFp¡î—⻇¢žÚ™ê²•"‘µu`]bzΡF`ù”¾Dk˜-]z\£eªÒLS!a¶¤dƂBH+.k>iÐã±7"è¿»Q;{˜~ŽW­ÙäôÚèõ-m+=ïô%¼ÊO"wÄä¨uU§ugJ½)г=Ëþ_ÀaÕª‰(טusì)¼Ðuh°m޼Öð–Ôx­Òκ9öÆ1Wó5j4n½…WoטÁö2}¸²øfûõ„?hí³4ôªÙå¢D£%zž•í[1;R†Üm ‚éiÜE>7š‰ÆúU±ŸöúéþÊ{"q'„Ióø
− docs/.git/objects/0e/f0bb4acb2a054328faea81aaa1b6ef08ab4324

binary file changed (1451 → absent bytes)

− docs/.git/objects/31/0e7b443f14a92b46059c540620e2e3ec9eeecf

binary file changed (918 → absent bytes)

− docs/.git/objects/33/d1dadf72d9a1c6217c5a6c7992dcdaaa343742

binary file changed (161 → absent bytes)

− docs/.git/objects/4c/2353910734c89633d869f0ffccf8f565c93221
@@ -1,2 +0,0 @@-x•ÎA-1@Q×=Eö‚$MǶ âÒx€˜T´vëBOï\Áí‡_[­cOiÕçR@%R$ÝJæ„å2äA‰Ng$JÈçÄAÝ$syv`62±Kô–eqž¢²Õ˜³75áÀ1x'ï~k3¥êM`÷ïŸûçp­2>6Úê(`À˜#zX£GtK]Özù¹Ódҋ5}Ao€v?¹C$
− docs/.git/objects/5c/7dd6782bd7103baeb041d69fd3e17410ab46dd

binary file changed (1552 → absent bytes)

− docs/.git/objects/63/50f4f119a8325852c5279f96ae5b0c34cce55f

binary file changed (1142 → absent bytes)

− docs/.git/objects/70/15cd0af9b0fc60257cff8d057cee6a475f44d8

binary file changed (456 → absent bytes)

− docs/.git/objects/87/66065959fca5de5327f875dbb67559f69b52b6
@@ -1,3 +0,0 @@-x•’]oÓ0†¹î¯ð|µ]$^5!QêD*éÐ݇F*@Ó.\Ûk¼:vˆOšVˆÿŽmPѾïsìsÎJۏÏß¾¡'óÛ,ÿ~w‰-(5º[~X|ʎùz‘2ÏçèÛU~½@ãøå53N²†iB.o0Â@õž¶mãö"¶õšä÷dXã`–¼rÆNioWj㒿PƓɤ7©d"¥¥æ_	U$4j›à̐¢|_IŒx¿K0Ȑ@Ÿ"^°ÚIH–ùÇèF$¥ @˔’aÖÊlPQ˧[.™‰¹sÕR'ØÁ^KWH	0€;AçNðm°tXÇkUr5÷ŸaBX¾‰P:~ö¸Wîg¶e½Ö‹ô«”îè¡'Ù|–ÏF­2¶±5Ú2ôÔêNÏÐϊ­åŸŸžMMG„<>¦£— ¤Ïâʊ=R"Á¥2Ê?B¨m¿µ¢Ñ2Òʁ?­×ÌùÊpV>N¯»{GI•ÒF§T«?’²»ñ&_.“Ÿ%𢩢YE-áSÀ굯.™ò¬A%ÌgB«ÿ"fEc6R„š£¸W¾«S;ÅQÌ{ëÀ¬¾uÐÅý?ˆí%GQ—¾YÝAh§xa’ÐÄwCOù)”:ý
æ{.
− docs/.git/objects/a3/3f00a997926762956b66487bc763c7500b5912

binary file changed (529 → absent bytes)

− docs/.git/objects/ad/296ab5c62662ad2f55c20cd75483c7014e3a9e

binary file changed (1002 → absent bytes)

− docs/.git/objects/c8/298c807614715a3dd52fe3fddcd74b42d8dd51

binary file changed (1169 → absent bytes)

− docs/.git/objects/ca/7171c6a9384a3af595c1110538b011803b834c

binary file changed (727 → absent bytes)

− docs/.git/objects/cc/746e214c400d625c17bb704964d2490009dcd6

binary file changed (554 → absent bytes)

− docs/.git/objects/da/b38cfd353bbdc462641543658ea8acd3eac19d

binary file changed (928 → absent bytes)

− docs/.git/objects/e5/dc6abf9873d9eaf80c4e5d308832b23e5b18cd

binary file changed (1028 → absent bytes)

− docs/.git/objects/e8/a9b100db71a644cc6cf513f26b5f44a42d17ab

binary file changed (972 → absent bytes)

− docs/.git/objects/ec/a1b33fcd1c0373e31d108a81dca8be042fd89c

binary file changed (672 → absent bytes)

− docs/.git/objects/f8/b79cfde7e99e07a48a906d6b0f43517cdee2b3

binary file changed (507 → absent bytes)

− docs/.git/objects/ff/6a9f5d733cd98051951968bb686e9766cf0a44

binary file changed (960 → absent bytes)

− docs/.git/objects/pack/pack-91a33bcc9daf02ed2b87eb63c5967322fb125afb.idx

binary file changed (5776 → absent bytes)

− docs/.git/objects/pack/pack-91a33bcc9daf02ed2b87eb63c5967322fb125afb.pack

binary file changed (49903 → absent bytes)

− docs/.git/packed-refs
@@ -1,3 +0,0 @@-# pack-refs with: peeled fully-peeled -4ac44b6241517d43310da25b086e175b3b9c0b49 refs/remotes/origin/gh-pages-4ad51f9dc87b6aa48cb614030521d957b8498622 refs/remotes/origin/master
− docs/.git/refs/heads/gh-pages
@@ -1,1 +0,0 @@-4c2353910734c89633d869f0ffccf8f565c93221
− docs/.git/refs/remotes/origin/HEAD
@@ -1,1 +0,0 @@-ref: refs/remotes/origin/master
− docs/.git/refs/remotes/origin/gh-pages
@@ -1,1 +0,0 @@-4c2353910734c89633d869f0ffccf8f565c93221
− docs/Ketchup-Auth.html
@@ -1,8 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Auth</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Auth.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Auth</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:basicAuth">basicAuth</a> &#8759; [(ByteString, ByteString)] &#8594; ByteString &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:basicAuth" class="def">basicAuth</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; [(ByteString, ByteString)]</td><td class="doc"><p>List of (Username, Password)-</p></td></tr><tr><td class="src">&#8594; ByteString</td><td class="doc"><p>Authentication Realm-</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc"><p>Success Handler-</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Performs HTTP Basic Auth-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/Ketchup-Chunked.html
@@ -1,13 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Chunked</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Chunked.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Chunked</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:chunkHeaders">chunkHeaders</a> &#8759; Socket &#8594; Int &#8594; [(ByteString, [ByteString])] &#8594; IO ()</li><li class="src short"><a href="#v:chunk">chunk</a> &#8759; Socket &#8594; ByteString &#8594; IO ()</li><li class="src short"><a href="#v:endchunk">endchunk</a> &#8759; Socket &#8594; IO ()</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:chunkHeaders" class="def">chunkHeaders</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Socket</td><td class="doc"><p>Socket to write to-</p></td></tr><tr><td class="src">&#8594; Int</td><td class="doc"><p>Status code-</p></td></tr><tr><td class="src">&#8594; [(ByteString, [ByteString])]</td><td class="doc"><p>Headers-</p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Send HTTP reply headers and begin a Chunked transmission-</p></div></div><div class="top"><p class="src"><a name="v:chunk" class="def">chunk</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Socket</td><td class="doc"><p>Socket to write to-</p></td></tr><tr><td class="src">&#8594; ByteString</td><td class="doc"><p>Content to write-</p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Sends a chunk-</p></div></div><div class="top"><p class="src"><a name="v:endchunk" class="def">endchunk</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Socket</td><td class="doc"><p>Socket to write to-</p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Send the final/closing chunk-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/Ketchup-Httpd.html
@@ -1,15 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Httpd</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Httpd.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Httpd</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:HTTPRequest">HTTPRequest</a>  = <a href="#v:HTTPRequest">HTTPRequest</a> {<ul class="subs"><li><a href="#v:method">method</a> &#8759; ByteString</li><li><a href="#v:uri">uri</a> &#8759; ByteString</li><li><a href="#v:httpver">httpver</a> &#8759; ByteString</li><li><a href="#v:headers">headers</a> &#8759; <a href="Ketchup-Httpd.html#t:Headers">Headers</a></li><li><a href="#v:body">body</a> &#8759; ByteString</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:Headers">Headers</a> = [(ByteString, [ByteString])]</li><li class="src short"><span class="keyword">type</span> <a href="#t:Handler">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</li><li class="src short"><a href="#v:listenHTTP">listenHTTP</a> &#8759; String &#8594; PortNumber &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; IO ()</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:HTTPRequest" class="def">HTTPRequest</a>  </p><div class="doc"><p>HTTP Request type- This holds a complete HTTP request-</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:HTTPRequest" class="def">HTTPRequest</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:method" class="def">method</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Request Method (GET, POST etc.)-</p></dd><dt class="src"><a name="v:uri" class="def">uri</a> &#8759; ByteString</dt><dd class="doc"><p>Get Request URI-</p></dd><dt class="src"><a name="v:httpver" class="def">httpver</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Version-</p></dd><dt class="src"><a name="v:headers" class="def">headers</a> &#8759; <a href="Ketchup-Httpd.html#t:Headers">Headers</a></dt><dd class="doc"><p>Get HTTP Headers (header, [values])-</p></dd><dt class="src"><a name="v:body" class="def">body</a> &#8759; ByteString</dt><dd class="doc"><p>Get HTTP Post body (raw string)-</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:HTTPRequest" class="caption collapser" onclick="toggleSection('i:HTTPRequest')">Instances</p><div id="section.i:HTTPRequest" class="show"><table><tr><td class="src">Show <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Headers" class="def">Headers</a> = [(ByteString, [ByteString])]</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Handler" class="def">Handler</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; IO ()</p></div><div class="top"><p class="src"><a name="v:listenHTTP" class="def">listenHTTP</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; String</td><td class="doc"><p>Address to bind (ie. <a href="*.html">*</a>)-</p></td></tr><tr><td class="src">&#8594; PortNumber</td><td class="doc"><p>Port to listen on-</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc"><p>Route function to call-</p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Listens for incoming HTTP request-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/Ketchup-Routing.html
@@ -1,9 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Routing</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Routing.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Routing</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:Route">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; (ByteString &#8594; Maybe ByteString) &#8594; IO ()</li><li class="src short"><a href="#v:route">route</a> &#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)] &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li><li class="src short"><a href="#v:useHandler">useHandler</a> &#8759; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Routing.html#t:Route">Route</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Route" class="def">Route</a> = Socket &#8594; <a href="Ketchup-Httpd.html#t:HTTPRequest">HTTPRequest</a> &#8594; (ByteString &#8594; Maybe ByteString) &#8594; IO ()</p></div><div class="top"><p class="src"><a name="v:route" class="def">route</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; [(ByteString, <a href="Ketchup-Routing.html#t:Route">Route</a>)]</td><td class="doc"><p>Routes-</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Router function- Takes a list of routes and iterates through them for every requeust-</p></div></div><div class="top"><p class="src"><a name="v:useHandler" class="def">useHandler</a> &#8759; <a href="Ketchup-Httpd.html#t:Handler">Handler</a> &#8594; <a href="Ketchup-Routing.html#t:Route">Route</a></p><div class="doc"><p>Wrap a handler in a route- Lets you use a handler (no parameters) as a route-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/Ketchup-Static.html
@@ -1,7 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Static</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Static.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Static</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:static">static</a> &#8759; ByteString &#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:static" class="def">static</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; ByteString</td><td class="doc"><p>Path to serve static files from-</p></td></tr><tr><td class="src">&#8594; <a href="Ketchup-Httpd.html#t:Handler">Handler</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Static file handler- Takes a directory and returns a route-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/Ketchup-Utils.html
@@ -1,19 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_Ketchup-Utils.html");};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Ketchup.Utils</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:trim">trim</a> &#8759; ByteString &#8594; ByteString</li><li class="src short"><a href="#v:breakBS">breakBS</a> &#8759; ByteString &#8594; ByteString &#8594; (ByteString, ByteString)</li><li class="src short"><a href="#v:fallback">fallback</a> &#8759;  Maybe a &#8594; a &#8594; a</li><li class="src short"><a href="#v:parseBody">parseBody</a> &#8759; ByteString &#8594; [(ByteString, ByteString)]</li><li class="src short"><a href="#v:sendReply">sendReply</a> &#8759; Socket &#8594; Int &#8594; [(ByteString, [ByteString])] &#8594; ByteString &#8594; IO ()</li><li class="src short"><a href="#v:sendBadRequest">sendBadRequest</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:sendNotFound">sendNotFound</a> &#8759; Socket &#8594; IO ()</li><li class="src short"><a href="#v:statusMsg">statusMsg</a> &#8759; Int &#8594; ByteString</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:trim" class="def">trim</a> &#8759; ByteString &#8594; ByteString</p><div class="doc"><p>Trim whitespace from headers-</p></div></div><div class="top"><p class="src"><a name="v:breakBS" class="def">breakBS</a> &#8759; ByteString &#8594; ByteString &#8594; (ByteString, ByteString)</p><div class="doc"><p>ByteString breakSubstring wrapper that drops delimiters-</p></div></div><div class="top"><p class="src"><a name="v:fallback" class="def">fallback</a> &#8759;  Maybe a &#8594; a &#8594; a</p></div><div class="top"><p class="src"><a name="v:parseBody" class="def">parseBody</a> &#8759; ByteString &#8594; [(ByteString, ByteString)]</p><div class="doc"><p>Parse a URL-encoded Request-</p></div></div><div class="top"><p class="src"><a name="v:sendReply" class="def">sendReply</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Socket</td><td class="doc"><p>Socket to write to-</p></td></tr><tr><td class="src">&#8594; Int</td><td class="doc"><p>Status Code to send-</p></td></tr><tr><td class="src">&#8594; [(ByteString, [ByteString])]</td><td class="doc"><p>HTTP headers (<a href="Header.html">Header</a>,[<a href="value1.html">value1</a>, <a href="value2.html">value2</a>])-</p></td></tr><tr><td class="src">&#8594; ByteString</td><td class="doc"><p>Body-</p></td></tr><tr><td class="src">&#8594; IO ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Send a HTTP reply- Sends a reply with the given parameters-</p></div></div><div class="top"><p class="src"><a name="v:sendBadRequest" class="def">sendBadRequest</a> &#8759; Socket &#8594; IO ()</p><div class="doc"><p>Send 400 Bad Request error-</p></div></div><div class="top"><p class="src"><a name="v:sendNotFound" class="def">sendNotFound</a> &#8759; Socket &#8594; IO ()</p><div class="doc"><p>Send 404 Not Found error-</p></div></div><div class="top"><p class="src"><a name="v:statusMsg" class="def">statusMsg</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">&#8759; Int</td><td class="doc"><p>Status code (ex. 404)-</p></td></tr><tr><td class="src">&#8594; ByteString</td><td class="doc"><p>Status message (ex. <a href="404 Not Found.html">404 Not Found</a>)-</p></td></tr></table></div><div class="doc"><p>Status Messages- Returns status message from a given status id-</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/doc-index.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title> (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">basicAuth</td><td class="module"><a href="Ketchup-Auth.html#v:basicAuth">Ketchup.Auth</a></td></tr><tr><td class="src">body</td><td class="module"><a href="Ketchup-Httpd.html#v:body">Ketchup.Httpd</a></td></tr><tr><td class="src">breakBS</td><td class="module"><a href="Ketchup-Utils.html#v:breakBS">Ketchup.Utils</a></td></tr><tr><td class="src">chunk</td><td class="module"><a href="Ketchup-Chunked.html#v:chunk">Ketchup.Chunked</a></td></tr><tr><td class="src">chunkHeaders</td><td class="module"><a href="Ketchup-Chunked.html#v:chunkHeaders">Ketchup.Chunked</a></td></tr><tr><td class="src">endchunk</td><td class="module"><a href="Ketchup-Chunked.html#v:endchunk">Ketchup.Chunked</a></td></tr><tr><td class="src">fallback</td><td class="module"><a href="Ketchup-Utils.html#v:fallback">Ketchup.Utils</a></td></tr><tr><td class="src">Handler</td><td class="module"><a href="Ketchup-Httpd.html#t:Handler">Ketchup.Httpd</a></td></tr><tr><td class="src">Headers</td><td class="module"><a href="Ketchup-Httpd.html#t:Headers">Ketchup.Httpd</a></td></tr><tr><td class="src">headers</td><td class="module"><a href="Ketchup-Httpd.html#v:headers">Ketchup.Httpd</a></td></tr><tr><td class="src">HTTPRequest</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ketchup-Httpd.html#t:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ketchup-Httpd.html#v:HTTPRequest">Ketchup.Httpd</a></td></tr><tr><td class="src">httpver</td><td class="module"><a href="Ketchup-Httpd.html#v:httpver">Ketchup.Httpd</a></td></tr><tr><td class="src">listenHTTP</td><td class="module"><a href="Ketchup-Httpd.html#v:listenHTTP">Ketchup.Httpd</a></td></tr><tr><td class="src">method</td><td class="module"><a href="Ketchup-Httpd.html#v:method">Ketchup.Httpd</a></td></tr><tr><td class="src">parseBody</td><td class="module"><a href="Ketchup-Utils.html#v:parseBody">Ketchup.Utils</a></td></tr><tr><td class="src">Route</td><td class="module"><a href="Ketchup-Routing.html#t:Route">Ketchup.Routing</a></td></tr><tr><td class="src">route</td><td class="module"><a href="Ketchup-Routing.html#v:route">Ketchup.Routing</a></td></tr><tr><td class="src">sendBadRequest</td><td class="module"><a href="Ketchup-Utils.html#v:sendBadRequest">Ketchup.Utils</a></td></tr><tr><td class="src">sendNotFound</td><td class="module"><a href="Ketchup-Utils.html#v:sendNotFound">Ketchup.Utils</a></td></tr><tr><td class="src">sendReply</td><td class="module"><a href="Ketchup-Utils.html#v:sendReply">Ketchup.Utils</a></td></tr><tr><td class="src">static</td><td class="module"><a href="Ketchup-Static.html#v:static">Ketchup.Static</a></td></tr><tr><td class="src">statusMsg</td><td class="module"><a href="Ketchup-Utils.html#v:statusMsg">Ketchup.Utils</a></td></tr><tr><td class="src">trim</td><td class="module"><a href="Ketchup-Utils.html#v:trim">Ketchup.Utils</a></td></tr><tr><td class="src">uri</td><td class="module"><a href="Ketchup-Httpd.html#v:uri">Ketchup.Httpd</a></td></tr><tr><td class="src">useHandler</td><td class="module"><a href="Ketchup-Routing.html#v:useHandler">Ketchup.Routing</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/frames.html
@@ -1,30 +0,0 @@-<!DOCTYPE html -     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">-<html xmlns="http://www.w3.org/1999/xhtml">-<head>-<title></title>-<script src="haddock-util.js" type="text/javascript"></script>-<script type="text/javascript"><!---/*--  The synopsis frame needs to be updated using javascript, so we hide-  it by default and only show it if javascript is enabled.--  TODO: provide some means to disable it.-*/-function load() {-  var d = document.getElementById("inner-fs");-  d.rows = "50%,50%";-  postReframe();-}---></script>-</head>-<frameset id="outer-fs" cols="25%,75%" onload="load()">-  <frameset id="inner-fs" rows="100%,0%">-    <frame src="index-frames.html" name="modules" />-    <frame src="" name="synopsis" />-  </frameset>-  <frame src="index.html" name="main" />-</frameset>-</html>
− docs/haddock-util.js
@@ -1,344 +0,0 @@-// Haddock JavaScript utilities--var rspace = /\s\s+/g,-	  rtrim = /^\s+|\s+$/g;--function spaced(s) { return (" " + s + " ").replace(rspace, " "); }-function trim(s)   { return s.replace(rtrim, ""); }--function hasClass(elem, value) {-  var className = spaced(elem.className || "");-  return className.indexOf( " " + value + " " ) >= 0;-}--function addClass(elem, value) {-  var className = spaced(elem.className || "");-  if ( className.indexOf( " " + value + " " ) < 0 ) {-    elem.className = trim(className + " " + value);-  }-}--function removeClass(elem, value) {-  var className = spaced(elem.className || "");-  className = className.replace(" " + value + " ", " ");-  elem.className = trim(className);-}--function toggleClass(elem, valueOn, valueOff, bool) {-  if (bool == null) { bool = ! hasClass(elem, valueOn); }-  if (bool) {-    removeClass(elem, valueOff);-    addClass(elem, valueOn);-  }-  else {-    removeClass(elem, valueOn);-    addClass(elem, valueOff);-  }-  return bool;-}---function makeClassToggle(valueOn, valueOff)-{-  return function(elem, bool) {-    return toggleClass(elem, valueOn, valueOff, bool);-  }-}--toggleShow = makeClassToggle("show", "hide");-toggleCollapser = makeClassToggle("collapser", "expander");--function toggleSection(id)-{-  var b = toggleShow(document.getElementById("section." + id));-  toggleCollapser(document.getElementById("control." + id), b);-  rememberCollapsed(id, b);-  return b;-}--var collapsed = {};-function rememberCollapsed(id, b)-{-  if(b)-    delete collapsed[id]-  else-    collapsed[id] = null;--  var sections = [];-  for(var i in collapsed)-  {-    if(collapsed.hasOwnProperty(i))-      sections.push(i);-  }-  // cookie specific to this page; don't use setCookie which sets path=/-  document.cookie = "collapsed=" + escape(sections.join('+'));-}--function restoreCollapsed()-{-  var cookie = getCookie("collapsed");-  if(!cookie)-    return;--  var ids = cookie.split('+');-  for(var i in ids)-  {-    if(document.getElementById("section." + ids[i]))-      toggleSection(ids[i]);-  }-}--function setCookie(name, value) {-  document.cookie = name + "=" + escape(value) + ";path=/;";-}--function clearCookie(name) {-  document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;";-}--function getCookie(name) {-  var nameEQ = name + "=";-  var ca = document.cookie.split(';');-  for(var i=0;i < ca.length;i++) {-    var c = ca[i];-    while (c.charAt(0)==' ') c = c.substring(1,c.length);-    if (c.indexOf(nameEQ) == 0) {-      return unescape(c.substring(nameEQ.length,c.length));-    }-  }-  return null;-}----var max_results = 75; // 50 is not enough to search for map in the base libraries-var shown_range = null;-var last_search = null;--function quick_search()-{-    perform_search(false);-}--function full_search()-{-    perform_search(true);-}---function perform_search(full)-{-    var text = document.getElementById("searchbox").value.toLowerCase();-    if (text == last_search && !full) return;-    last_search = text;-    -    var table = document.getElementById("indexlist");-    var status = document.getElementById("searchmsg");-    var children = table.firstChild.childNodes;-    -    // first figure out the first node with the prefix-    var first = bisect(-1);-    var last = (first == -1 ? -1 : bisect(1));--    if (first == -1)-    {-        table.className = "";-        status.innerHTML = "No results found, displaying all";-    }-    else if (first == 0 && last == children.length - 1)-    {-        table.className = "";-        status.innerHTML = "";-    }-    else if (last - first >= max_results && !full)-    {-        table.className = "";-        status.innerHTML = "More than " + max_results + ", press Search to display";-    }-    else-    {-        // decide what you need to clear/show-        if (shown_range)-            setclass(shown_range[0], shown_range[1], "indexrow");-        setclass(first, last, "indexshow");-        shown_range = [first, last];-        table.className = "indexsearch";-        status.innerHTML = "";-    }--    -    function setclass(first, last, status)-    {-        for (var i = first; i <= last; i++)-        {-            children[i].className = status;-        }-    }-    -    -    // do a binary search, treating 0 as ...-    // return either -1 (no 0's found) or location of most far match-    function bisect(dir)-    {-        var first = 0, finish = children.length - 1;-        var mid, success = false;--        while (finish - first > 3)-        {-            mid = Math.floor((finish + first) / 2);--            var i = checkitem(mid);-            if (i == 0) i = dir;-            if (i == -1)-                finish = mid;-            else-                first = mid;-        }-        var a = (dir == 1 ? first : finish);-        var b = (dir == 1 ? finish : first);-        for (var i = b; i != a - dir; i -= dir)-        {-            if (checkitem(i) == 0) return i;-        }-        return -1;-    }    -    -    -    // from an index, decide what the result is-    // 0 = match, -1 is lower, 1 is higher-    function checkitem(i)-    {-        var s = getitem(i).toLowerCase().substr(0, text.length);-        if (s == text) return 0;-        else return (s > text ? -1 : 1);-    }-    -    -    // from an index, get its string-    // this abstracts over alternates-    function getitem(i)-    {-        for ( ; i >= 0; i--)-        {-            var s = children[i].firstChild.firstChild.data;-            if (s.indexOf(' ') == -1)-                return s;-        }-        return ""; // should never be reached-    }-}--function setSynopsis(filename) {-    if (parent.window.synopsis) {-        if (parent.window.synopsis.location.replace) {-            // In Firefox this avoids adding the change to the history.-            parent.window.synopsis.location.replace(filename);-        } else {-            parent.window.synopsis.location = filename;-        }-    }-}--function addMenuItem(html) {-  var menu = document.getElementById("page-menu");-  if (menu) {-    var btn = menu.firstChild.cloneNode(false);-    btn.innerHTML = html;-    menu.appendChild(btn);-  }-}--function adjustForFrames() {-  var bodyCls;-  -  if (parent.location.href == window.location.href) {-    // not in frames, so add Frames button-    addMenuItem("<a href='#' onclick='reframe();return true;'>Frames</a>");-    bodyCls = "no-frame";-  }-  else {-    bodyCls = "in-frame";-  }-  addClass(document.body, bodyCls);-}--function reframe() {-  setCookie("haddock-reframe", document.URL);-  window.location = "frames.html";-}--function postReframe() {-  var s = getCookie("haddock-reframe");-  if (s) {-    parent.window.main.location = s;-    clearCookie("haddock-reframe");-  }-}--function styles() {-  var i, a, es = document.getElementsByTagName("link"), rs = [];-  for (i = 0; a = es[i]; i++) {-    if(a.rel.indexOf("style") != -1 && a.title) {-      rs.push(a);-    }-  }-  return rs;-}--function addStyleMenu() {-  var as = styles();-  var i, a, btns = "";-  for(i=0; a = as[i]; i++) {-    btns += "<li><a href='#' onclick=\"setActiveStyleSheet('"-      + a.title + "'); return false;\">"-      + a.title + "</a></li>"-  }-  if (as.length > 1) {-    var h = "<div id='style-menu-holder'>"-      + "<a href='#' onclick='styleMenu(); return false;'>Style &#9662;</a>"-      + "<ul id='style-menu' class='hide'>" + btns + "</ul>"-      + "</div>";-    addMenuItem(h);-  }-}--function setActiveStyleSheet(title) {-  var as = styles();-  var i, a, found;-  for(i=0; a = as[i]; i++) {-    a.disabled = true;-          // need to do this always, some browsers are edge triggered-    if(a.title == title) {-      found = a;-    }-  }-  if (found) {-    found.disabled = false;-    setCookie("haddock-style", title);-  }-  else {-    as[0].disabled = false;-    clearCookie("haddock-style");-  }-  styleMenu(false);-}--function resetStyle() {-  var s = getCookie("haddock-style");-  if (s) setActiveStyleSheet(s);-}---function styleMenu(show) {-  var m = document.getElementById('style-menu');-  if (m) toggleShow(m, show);-}---function pageLoad() {-  addStyleMenu();-  adjustForFrames();-  resetStyle();-  restoreCollapsed();-}-
− docs/hslogo-16.png

binary file changed (1684 → absent bytes)

− docs/index-frames.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Ketchup-Auth.html" target="main">Ketchup.Auth</a></li><li class="module"><a href="Ketchup-Chunked.html" target="main">Ketchup.Chunked</a></li><li class="module"><a href="Ketchup-Httpd.html" target="main">Ketchup.Httpd</a></li><li class="module"><a href="Ketchup-Routing.html" target="main">Ketchup.Routing</a></li><li class="module"><a href="Ketchup-Static.html" target="main">Ketchup.Static</a></li><li class="module"><a href="Ketchup-Utils.html" target="main">Ketchup.Utils</a></li></ul></div></body></html>
− docs/index.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Ketchup</span><ul id="section.n.1" class="show"><li><span class="module"><a href="Ketchup-Auth.html">Ketchup.Auth</a></span></li><li><span class="module"><a href="Ketchup-Chunked.html">Ketchup.Chunked</a></span></li><li><span class="module"><a href="Ketchup-Httpd.html">Ketchup.Httpd</a></span></li><li><span class="module"><a href="Ketchup-Routing.html">Ketchup.Routing</a></span></li><li><span class="module"><a href="Ketchup-Static.html">Ketchup.Static</a></span></li><li><span class="module"><a href="Ketchup-Utils.html">Ketchup.Utils</a></span></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.13.2</p></div></body></html>
− docs/main.txt
@@ -1,87 +0,0 @@--- Hoogle documentation, generated by Haddock--- See Hoogle, http://www.haskell.org/hoogle/--@package main--module Ketchup.Utils---- | Trim whitespace from headers-trim :: ByteString -> ByteString---- | ByteString breakSubstring wrapper that drops delimiters-breakBS :: ByteString -> ByteString -> (ByteString, ByteString)-fallback :: Maybe a -> a -> a---- | Parse a URL-encoded Request-parseBody :: ByteString -> [(ByteString, ByteString)]---- | Send a HTTP reply Sends a reply with the given parameters-sendReply :: Socket -> Int -> [(ByteString, [ByteString])] -> ByteString -> IO ()---- | Send 400 Bad Request error-sendBadRequest :: Socket -> IO ()---- | Send 404 Not Found error-sendNotFound :: Socket -> IO ()---- | Status Messages Returns status message from a given status id-statusMsg :: Int -> ByteString--module Ketchup.Httpd---- | HTTP Request type This holds a complete HTTP request-data HTTPRequest-HTTPRequest :: ByteString -> ByteString -> ByteString -> Headers -> ByteString -> HTTPRequest---- | Get HTTP Request Method (GET, POST etc.)-method :: HTTPRequest -> ByteString---- | Get Request URI-uri :: HTTPRequest -> ByteString---- | Get HTTP Version-httpver :: HTTPRequest -> ByteString---- | Get HTTP Headers (header, [values])-headers :: HTTPRequest -> Headers---- | Get HTTP Post body (raw string)-body :: HTTPRequest -> ByteString-type Headers = [(ByteString, [ByteString])]-type Handler = Socket -> HTTPRequest -> IO ()---- | Listens for incoming HTTP request-listenHTTP :: String -> PortNumber -> Handler -> IO ()-instance Show HTTPRequest--module Ketchup.Chunked---- | Send HTTP reply headers and begin a Chunked transmission-chunkHeaders :: Socket -> Int -> [(ByteString, [ByteString])] -> IO ()---- | Sends a chunk-chunk :: Socket -> ByteString -> IO ()---- | Send the final/closing chunk-endchunk :: Socket -> IO ()--module Ketchup.Routing-type Route = Socket -> HTTPRequest -> (ByteString -> Maybe ByteString) -> IO ()---- | Router function Takes a list of routes and iterates through them for---   every requeust-route :: [(ByteString, Route)] -> Handler---- | Wrap a handler in a route Lets you use a handler (no parameters) as a---   route-useHandler :: Handler -> Route--module Ketchup.Static---- | Static file handler Takes a directory and returns a route-static :: ByteString -> Handler--module Ketchup.Auth---- | Performs HTTP Basic Auth-basicAuth :: [(ByteString, ByteString)] -> ByteString -> Handler -> Handler
− docs/mini_Ketchup-Auth.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Auth</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Auth</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Auth.html#v:basicAuth" target="main">basicAuth</a></p></div></div></body></html>
− docs/mini_Ketchup-Chunked.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Chunked</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Chunked</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Chunked.html#v:chunkHeaders" target="main">chunkHeaders</a></p></div><div class="top"><p class="src"><a href="Ketchup-Chunked.html#v:chunk" target="main">chunk</a></p></div><div class="top"><p class="src"><a href="Ketchup-Chunked.html#v:endchunk" target="main">endchunk</a></p></div></div></body></html>
− docs/mini_Ketchup-Httpd.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Httpd</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Httpd</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ketchup-Httpd.html#t:HTTPRequest" target="main">HTTPRequest</a> </p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Httpd.html#t:Headers" target="main">Headers</a> </p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Httpd.html#t:Handler" target="main">Handler</a> </p></div><div class="top"><p class="src"><a href="Ketchup-Httpd.html#v:listenHTTP" target="main">listenHTTP</a></p></div></div></body></html>
− docs/mini_Ketchup-Routing.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Routing</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Routing</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ketchup-Routing.html#t:Route" target="main">Route</a> </p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:route" target="main">route</a></p></div><div class="top"><p class="src"><a href="Ketchup-Routing.html#v:useHandler" target="main">useHandler</a></p></div></div></body></html>
− docs/mini_Ketchup-Static.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Static</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Static</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Static.html#v:static" target="main">static</a></p></div></div></body></html>
− docs/mini_Ketchup-Utils.html
@@ -1,4 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ketchup.Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script></head><body id="mini"><div id="module-header"><p class="caption">Ketchup.Utils</p></div><div id="interface"><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:trim" target="main">trim</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:breakBS" target="main">breakBS</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:fallback" target="main">fallback</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:parseBody" target="main">parseBody</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendReply" target="main">sendReply</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendBadRequest" target="main">sendBadRequest</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:sendNotFound" target="main">sendNotFound</a></p></div><div class="top"><p class="src"><a href="Ketchup-Utils.html#v:statusMsg" target="main">statusMsg</a></p></div></div></body></html>
− docs/minus.gif

binary file changed (56 → absent bytes)

− docs/ocean.css
@@ -1,546 +0,0 @@-/* @group Fundamentals */--* { margin: 0; padding: 0 }--/* Is this portable? */-html {-  background-color: white;-  width: 100%;-  height: 100%;-}--body {-  background: white;-  color: black;-  text-align: left;-  min-height: 100%;-  position: relative;-}--p {-  margin: 0.8em 0;-}--ul, ol {-  margin: 0.8em 0 0.8em 2em;-}--dl {-  margin: 0.8em 0;-}--dt {-  font-weight: bold;-}-dd {-  margin-left: 2em;-}--a { text-decoration: none; }-a[href]:link { color: rgb(196,69,29); }-a[href]:visited { color: rgb(171,105,84); }-a[href]:hover { text-decoration:underline; }--/* @end */--/* @group Fonts & Sizes */--/* Basic technique & IE workarounds from YUI 3-   For reasons, see:-      http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css- */- -body {-	font:13px/1.4 sans-serif;-	*font-size:small; /* for IE */-	*font:x-small; /* for IE in quirks mode */-}--h1 { font-size: 146.5%; /* 19pt */ } -h2 { font-size: 131%;   /* 17pt */ }-h3 { font-size: 116%;   /* 15pt */ }-h4 { font-size: 100%;   /* 13pt */ }-h5 { font-size: 100%;   /* 13pt */ }--select, input, button, textarea {-	font:99% sans-serif;-}--table {-	font-size:inherit;-	font:100%;-}--pre, code, kbd, samp, tt, .src {-	font-family:monospace;-	*font-size:108%;-	line-height: 124%;-}--.links, .link {-  font-size: 85%; /* 11pt */-}--#module-header .caption {-  font-size: 182%; /* 24pt */-}--.info  {-  font-size: 85%; /* 11pt */-}--#table-of-contents, #synopsis  {-  /* font-size: 85%; /* 11pt */-}---/* @end */--/* @group Common */--.caption, h1, h2, h3, h4, h5, h6 { -  font-weight: bold;-  color: rgb(78,98,114);-  margin: 0.8em 0 0.4em;-}--* + h1, * + h2, * + h3, * + h4, * + h5, * + h6 {-  margin-top: 2em;-}--h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 {-  margin-top: inherit;-}--ul.links {-  list-style: none;-  text-align: left;-  float: right;-  display: inline-table;-  margin: 0 0 0 1em;-}--ul.links li {-  display: inline;-  border-left: 1px solid #d5d5d5; -  white-space: nowrap;-  padding: 0;-}--ul.links li a {-  padding: 0.2em 0.5em;-}--.hide { display: none; }-.show { display: inherit; }-.clear { clear: both; }--.collapser {-  background-image: url(minus.gif);-  background-repeat: no-repeat;-}-.expander {-  background-image: url(plus.gif);-  background-repeat: no-repeat;-}-p.caption.collapser,-p.caption.expander {-  background-position: 0 0.4em;-}-.collapser, .expander {-  padding-left: 14px;-  margin-left: -14px;-  cursor: pointer;-}--pre {-  padding: 0.25em;-  margin: 0.8em 0;-  background: rgb(229,237,244);-  overflow: auto;-  border-bottom: 0.25em solid white;-  /* white border adds some space below the box to compensate-     for visual extra space that paragraphs have between baseline-     and the bounding box */-}--.src {-  background: #f0f0f0;-  padding: 0.2em 0.5em;-}--.keyword { font-weight: normal; }-.def { font-weight: bold; }---/* @end */--/* @group Page Structure */--#content {-  margin: 0 auto;-  padding: 0 2em 6em;-}--#package-header {-  background: rgb(41,56,69);-  border-top: 5px solid rgb(78,98,114);-  color: #ddd;-  padding: 0.2em;-  position: relative;-  text-align: left;-}--#package-header .caption {-  background: url(hslogo-16.png) no-repeat 0em;-  color: white;-  margin: 0 2em;-  font-weight: normal;-  font-style: normal;-  padding-left: 2em;-}--#package-header a:link, #package-header a:visited { color: white; }-#package-header a:hover { background: rgb(78,98,114); }--#module-header .caption {-  color: rgb(78,98,114);-  font-weight: bold;-  border-bottom: 1px solid #ddd;-}--table.info {-  float: right;-  padding: 0.5em 1em;-  border: 1px solid #ddd;-  color: rgb(78,98,114);-  background-color: #fff;-  max-width: 40%;-  border-spacing: 0;-  position: relative;-  top: -0.5em;-  margin: 0 0 0 2em;-}--.info th {-	padding: 0 1em 0 0;-}--div#style-menu-holder {-  position: relative;-  z-index: 2;-  display: inline;-}--#style-menu {-  position: absolute;-  z-index: 1;-  overflow: visible;-  background: #374c5e;-  margin: 0;-  text-align: center;-  right: 0;-  padding: 0;-  top: 1.25em;-}--#style-menu li {-	display: list-item;-	border-style: none;-	margin: 0;-	padding: 0;-	color: #000;-	list-style-type: none;-}--#style-menu li + li {-	border-top: 1px solid #919191;-}--#style-menu a {-  width: 6em;-  padding: 3px;-  display: block;-}--#footer {-  background: #ddd;-  border-top: 1px solid #aaa;-  padding: 0.5em 0;-  color: #666;-  text-align: center;-  position: absolute;-  bottom: 0;-  width: 100%;-  height: 3em;-}--/* @end */--/* @group Front Matter */--#table-of-contents {-  float: right;-  clear: right;-  background: #faf9dc;-  border: 1px solid #d8d7ad;-  padding: 0.5em 1em;-  max-width: 20em;-  margin: 0.5em 0 1em 1em;-}--#table-of-contents .caption {-  text-align: center;-  margin: 0;-}--#table-of-contents ul {-  list-style: none;-  margin: 0;-}--#table-of-contents ul ul {-  margin-left: 2em;-}--#description .caption {-  display: none;-}--#synopsis {-  display: none;-}--.no-frame #synopsis {-  display: block;-  position: fixed;-  right: 0;-  height: 80%;-  top: 10%;-  padding: 0;-}--#synopsis .caption {-  float: left;-  width: 29px;-  color: rgba(255,255,255,0);-  height: 110px;-  margin: 0;-  font-size: 1px;-  padding: 0;-}--#synopsis p.caption.collapser {-  background: url(synopsis.png) no-repeat -64px -8px;-}--#synopsis p.caption.expander {-  background: url(synopsis.png) no-repeat 0px -8px;-}--#synopsis ul {-  height: 100%;-  overflow: auto;-  padding: 0.5em;-  margin: 0;-}--#synopsis ul ul {-  overflow: hidden;-}--#synopsis ul,-#synopsis ul li.src {-  background-color: #faf9dc;-  white-space: nowrap;-  list-style: none;-  margin-left: 0;-}--/* @end */--/* @group Main Content */--#interface div.top { margin: 2em 0; }-#interface h1 + div.top,-#interface h2 + div.top,-#interface h3 + div.top,-#interface h4 + div.top,-#interface h5 + div.top {- 	margin-top: 1em;-}-#interface p.src .link {-  float: right;-  color: #919191;-  border-left: 1px solid #919191;-  background: #f0f0f0;-  padding: 0 0.5em 0.2em;-  margin: 0 -0.5em 0 0.5em;-}--#interface table { border-spacing: 2px; }-#interface td {-  vertical-align: top;-  padding-left: 0.5em;-}-#interface td.src {-  white-space: nowrap;-}-#interface td.doc p {-  margin: 0;-}-#interface td.doc p + p {-  margin-top: 0.8em;-}--.subs dl {-  margin: 0;-}--.subs dt {-  float: left;-  clear: left;-  display: block;-  margin: 1px 0;-}--.subs dd {-  float: right;-  width: 90%;-  display: block;-  padding-left: 0.5em;-  margin-bottom: 0.5em;-}--.subs dd.empty {-  display: none;-}--.subs dd p {-  margin: 0;-}--.top p.src {-  border-top: 1px solid #ccc;-}--.subs, .doc {-  /* use this selector for one level of indent */-  padding-left: 2em;-}--.warning {-  color: red;-}--.arguments {-  margin-top: -0.4em;-}-.arguments .caption {-  display: none;-}--.fields { padding-left: 1em; }--.fields .caption { display: none; }--.fields p { margin: 0 0; }--/* this seems bulky to me-.methods, .constructors {-  background: #f8f8f8;-  border: 1px solid #eee;-}-*/--/* @end */--/* @group Auxillary Pages */--#mini {-  margin: 0 auto;-  padding: 0 1em 1em;-}--#mini > * {-  font-size: 93%; /* 12pt */  -}--#mini #module-list .caption,-#mini #module-header .caption {-  font-size: 125%; /* 15pt */-}--#mini #interface h1,-#mini #interface h2,-#mini #interface h3,-#mini #interface h4 {-  font-size: 109%; /* 13pt */-  margin: 1em 0 0;-}--#mini #interface .top,-#mini #interface .src {-  margin: 0;-}--#mini #module-list ul {-  list-style: none;-  margin: 0;-}--#alphabet ul {-	list-style: none;-	padding: 0;-	margin: 0.5em 0 0;-	text-align: center;-}--#alphabet li {-	display: inline;-	margin: 0 0.25em;-}--#alphabet a {-	font-weight: bold;-}--#index .caption,-#module-list .caption { font-size: 131%; /* 17pt */ }--#index table {-  margin-left: 2em;-}--#index .src {-  font-weight: bold;-}-#index .alt {-  font-size: 77%; /* 10pt */-  font-style: italic;-  padding-left: 2em;-}--#index td + td {-  padding-left: 1em;-}--#module-list ul {-  list-style: none;-  margin: 0 0 0 2em;-}--#module-list li {-  clear: right;-}--#module-list span.collapser,-#module-list span.expander {-  background-position: 0 0.3em;-}--#module-list .package {-  float: right;-}--/* @end */
− docs/plus.gif

binary file changed (59 → absent bytes)

− docs/synopsis.png

binary file changed (11327 → absent bytes)

− example

file too large to diff

− example.core

file too large to diff

− example.hi

binary file changed (2970 → absent bytes)

− example.o

binary file changed (36760 → absent bytes)

− gendocs.sh~
@@ -1,1 +0,0 @@-haddock --html --hoogle -U -o docs Ketchup/Chunked.hs Ketchup/Httpd.hs Ketchup/Routing.hs Ketchup/Static.hs Ketchup/Utils.hs