anchor.diff:  
   (defparameter *url-scanner*
     (cl-ppcre:create-scanner
  -    "^([a-z]+)://(([a-z0-9-]+):([a-z0-9-]+)@)?([^/:]+)(:([0-9]+))?(/.*)$"
  +    "^([a-z]+)://(([\\w-]+):([\\w-]+)@)?([^/:\?]+)(:([0-9]+))?((/|\\?).*)?$"
       :case-insensitive-mode t)
     "Scanner that splits URLs into their multiple parts. A bit sloppy abd general,
      but works great for it's purpose.")
  
positive.code:               :password pass
                :host host
                :port (if port (read-from-string port) 80)
                :resource resource)))))
  
  (defun http-client (uri &key (method "GET") headers body)
    (check-event-loop-running)
    (let ((dns-base (le:evdns-base-new *event-base* 1)))
    (let ((request (le:evhttp-connection-base-new *event-base* 
  
  (defun http-server (bind port request-cb fail-cb)
    "Start an HTTP server. If `bind` is nil, it bind to 0.0.0.0."
  
negative.code:   (clear-callbacks http-base))
  
  (defun get-method (enum)
    "Given a libevent EVHTTP_REQ enum key word, return the appropriate method
     string."
    (case enum
      (:+evhttp-req-get+ "GET")
      (:+evhttp-req-post+ "POST")
      (:+evhttp-req-head+ "HEAD")
      (:+evhttp-req-put+ "PUT")
      (:+evhttp-req-delete+ "DELETE")
      (:+evhttp-req-options+ "OPTIONS")
      (:+evhttp-req-trace+ "TRACE")
      (:+evhttp-req-connect+ "CONNECT")
      (:+evhttp-req-patch+ "PATCH")))
  
  (defun get-method-reverse (method)
    "Given a method string, return the appropriate enum value for the libevent
     type."
    (case (cond
            ((stringp method) (read-from-string method))
            ((symbolp method) method))
      (GET :+evhttp-req-get+)
      (POST :+evhttp-req-post+)
      (HEAD :+evhttp-req-head+)
      (PUT :+evhttp-req-put+)
      (DELETE :+evhttp-req-delete+)
      (OPTIONS :+evhttp-req-options+)
      (TRACE :+evhttp-req-trace+)
      (CONNECT :+evhttp-req-connect+)
      (PATCH :+evhttp-req-patch+)
      (t :+evhttp-req-get+)))
  
  (defun http-get-headers (http-headers)
    "Pull the headers out of an HTTP request as a plist."
    (let ((header-ptr (le-a:evkeyvalq-thq-first http-headers))
          (headers nil))
      (loop while (not (cffi:null-pointer-p header-ptr)) do
        (let ((key (le-a:evkeyval-key header-ptr))
              (val (le-a:evkeyval-value header-ptr)))
          (push (cons key val) headers)
          (setf header-ptr (le-a:evkeyval-next header-ptr))))
      headers))
  
  (cffi:defcallback http-request-cb :void ((request :pointer) (http-base :pointer))
    "ALL HTTP requests come through here. They are processed into the http-request
  