diff --git a/README.md b/README.md
index 7d3e04898c222defd050ef052b9ab8b68fab783e..8166e6faa3e496d4fe4cc6177488991496cb1e04 100644
--- a/README.md
+++ b/README.md
@@ -11,8 +11,8 @@ Key features of the system:
  * Lua functions, procedures, triggers, with
    rich access to database API, JSON support,
    inter-procedure and network communication libraries
- * a command line client supporting simple SQL,
-   a native Lua console and Memcached text protocol.
+ * a command line client supporting simple SQL and
+   a native Lua console
 
 Tarantool is ideal for data-enriched components of 
 scalable Web architecture: traditional database caches, queue
diff --git a/doc/user/configuration-reference.xml b/doc/user/configuration-reference.xml
index 7c73535e907cc0223e604a1be4a2982450376ccb..06a3533e500ff17ea4893508aaf2b206e1df5a19 100644
--- a/doc/user/configuration-reference.xml
+++ b/doc/user/configuration-reference.xml
@@ -777,114 +777,6 @@ tarantool_box: primary@sessions pri:33013 sec:33014 adm:33015</programlisting>
     </tgroup>
   </table>
 
-  <table frame='all' pgwide='1'>
-    <title>Memcached protocol support</title>
-    <tgroup cols='6' colsep='1' rowsep='1'>
-      <colspec colnum="1" colname="col1" colwidth="2*"/>
-      <colspec colnum="6" colname="col4" colwidth="6*"/>
-
-      <thead>
-        <row>
-          <entry>Name</entry>
-          <entry>Type</entry>
-          <entry>Default</entry>
-          <entry>Required?</entry>
-          <entry>Dynamic?</entry>
-          <entry>Description</entry>
-        </row>
-      </thead>
-
-      <tbody>
-
-        <row>
-          <entry>memcached_port</entry>
-          <entry>integer</entry>
-          <entry>none</entry>
-          <entry>no</entry>
-          <entry>no</entry>
-          <entry>
-            <anchor xml:id="memcached_port" xreflabel="memcached_port"/>
-
-          Turn on Memcached protocol support on the given
-            port. All requests on this port are directed to
-            a dedicated space, set in <olink
-            targetptr="memcached_space"/>.
-            Memcached-style flags are supported and stored
-            along with the value. The expiration time can also be
-            set and is persistent, but is ignored, unless <olink
-            targetptr="memcached_expire"/> is turned on.
-            Unlike Memcached, all data still goes to the binary
-            log and to the replica, if latter one is set up, which
-            means that power outage does not lead to loss of all
-            data. Thanks to data persistence, cache warm up time
-            is also very short.
-          </entry>
-        </row>
-
-        <row>
-          <entry>memcached_space</entry>
-          <entry>integer</entry>
-          <entry>23</entry>
-          <entry>no</entry>
-          <entry>no</entry>
-          <entry>
-            <anchor xml:id="memcached_space"
-            xreflabel="memcached_space"/>
-          Space id to store memcached data in. The
-          format of tuple is [key, metadata, value], with a HASH
-          index based on the key. Since the space format
-          is defined by Memcached data model, it must not be
-          previously configured.</entry>
-        </row>
-
-        <row>
-          <entry>memcached_expire</entry>
-          <entry>boolean</entry>
-          <entry>false</entry>
-          <entry>no</entry>
-          <entry>no</entry>
-          <entry>
-            <anchor xml:id="memcached_expire"
-            xreflabel="memcached_expire"/>
-            Turn on tuple time-to-live support in
-            <olink targetptr="memcached_space"/>. This
-            effectively turns Tarantool into a persistent,
-            replicated and scriptable implementation of Memcached.
-          </entry>
-        </row>
-
-        <row>
-          <entry>memcached_expire_per_loop</entry>
-          <entry>integer</entry>
-          <entry>1024</entry>
-          <entry>no</entry>
-          <entry><emphasis role="strong">yes</emphasis></entry>
-          <entry>How many records to consider per iteration of the
-            expiration loop. Tuple expiration is performed in a separate
-            <quote>green</quote> thread within our cooperative multitasking
-            framework and this setting effectively limits how long
-            the expiration loop stays on CPU uninterrupted.
-          </entry>
-        </row>
-
-        <row>
-          <entry>memcached_expire_full_sweep</entry>
-          <entry>float</entry>
-          <entry>3600</entry>
-          <entry>no</entry>
-          <entry><emphasis role="strong">yes</emphasis></entry>
-          <entry>Try to make sure that every tuple is considered
-            for expiration within this time frame (in seconds).
-            Together with memcached_expire_per_loop this defines
-            how often the expiration <quote>green</quote> thread
-            is scheduled on CPU.
-          </entry>
-        </row>
-
-      </tbody>
-    </tgroup>
-  </table>
-
 </section>
 </chapter>
 
diff --git a/doc/user/connectors.xml b/doc/user/connectors.xml
index 5466f2d9ac2913a28eb15f8497a68d051125f63a..5ed2d5c1352926803437504ca950dabf37fcde3f 100644
--- a/doc/user/connectors.xml
+++ b/doc/user/connectors.xml
@@ -11,8 +11,6 @@
   This chapter documents APIs for various programming languages.
 </para></blockquote>
 
-<para>Apart from the native Tarantool client driver, you can always use a <emphasis role="strong">Memcached</emphasis> driver of your choice, after enabling Memcached protocol in the configuration file.</para>
-
   <section xml:id="connector-c">
     <title>C</title>
     <para>
diff --git a/doc/user/errcode.xml b/doc/user/errcode.xml
index 3a772f9edf307188df36c8cd124630e9a065c26a..03a68e5292b9e83c43a2e11bf5cd00cad76b939d 100644
--- a/doc/user/errcode.xml
+++ b/doc/user/errcode.xml
@@ -8,9 +8,8 @@
 which is normally more descriptive than error code,
 is not present in server response. The actual message may contain
 a file name, a detailed reason or operating system error code.
-All such messages, however, are logged in the error log. When
-using <emphasis role="strong">Memcached</emphasis> protocol, the error message is sent to the
-client along with the code. Below follow only general descriptions
+All such messages, however, are logged in the error log. 
+Below follow only general descriptions
 of some popular codes. A complete list of errors can be found in
 file <filename xlink:href="https://github.com/tarantool/tarantool/blob/master/include/errcode.h">errcode.h</filename> in the source tree.
 
@@ -85,6 +84,12 @@ file <filename xlink:href="https://github.com/tarantool/tarantool/blob/master/in
     </para></listitem>
   </varlistentry>
 
+  <varlistentry>
+    <term xml:id="ER_UPDATE_FIELD" xreflabel="ER_UPDATE_FIELD">ER_UPDATE_FIELD</term>
+    <listitem><para>A error occured during update of a field.
+    </para></listitem>
+  </varlistentry>
+
 </variablelist>
 </appendix>
 
diff --git a/doc/user/language-reference.xml b/doc/user/language-reference.xml
index a85b8f15bf24998d43219ecb5c8ecd0ed4f2dc5e..02782b180f6749c6ae94751a11ca7d76dc84d0a1 100644
--- a/doc/user/language-reference.xml
+++ b/doc/user/language-reference.xml
@@ -17,7 +17,7 @@
   Unlike many other key/value servers, Tarantool uses
   different TCP ports and client/server protocols for data
   manipulation and administrative statements.
-  During start up, the server can connect to up to five TCP ports:
+  During start up, the server can connect to up to four TCP ports:
   <itemizedlist>
     <listitem><para>
       Read/write data port, to handle INSERTs, UPDATEs,
@@ -46,9 +46,6 @@
         set in the option file, the corresponding server process
         is not started.
       </para></listitem>
-    <listitem><para>Memcached port. Optional, read-write data port
-      that speaks Memcached text protocol. This port is off by default.
-    </para></listitem>
   </itemizedlist>
   In absence of authentication, this approach allows system
   administrators to restrict access to read/write or
@@ -121,35 +118,6 @@
     and
     <link xlink:href="https://github.com/tarantool/tarantool/blob/master/doc/sql.txt"><filename>doc/sql.txt</filename></link> respectively.
   </para>
-  <section xml:id="memcached-protocol">
-    <title>Memcached protocol</title>
-      <para>If full access to Tarantool functionality is not needed,
-      or there is no readily available connector for the
-      programming language in use, any existing client driver for
-      Memcached will make do as a Tarantool connector.
-      To enable text Memcached protocol, turn on
-      <olink targetptr="memcached_port"/> in the option file.
-      Since Memcached has no notion of spaces or secondary
-      indexes, this port only makes it possible to access one
-      dedicated space (see <olink
-      targetptr="memcached_space"/>) via its primary key.
-      Unless tuple expiration is enabled with <olink
-      targetptr="memcached_expire"/>, TTL part of the message is
-      stored but ignored.
-     </para>
-     <para>
-       Notice, that <olink targetptr="memcached_space"/> is also
-       accessible using the primary port or Lua. A common use
-       of the Memcached port in Tarantool is when a Memcached default
-       expiration algorithm is insufficient, and a custom Lua
-       expiration procedure is used.
-     </para>
-     <para>
-      Tarantool does not support the binary protocol of Memcached.
-      If top performance is a must, Tarantool's own binary
-      protocol should be used.
-     </para>
-  </section>
 </section>
 
 <section xml:id="administrative-console">
diff --git a/doc/user/proctitle.xml b/doc/user/proctitle.xml
index 23be03ca579c40af3de1405af5036f46f19011af..dc26fffba0b4708ad02bbac77eb67312fbc85448 100644
--- a/doc/user/proctitle.xml
+++ b/doc/user/proctitle.xml
@@ -48,9 +48,8 @@
   </itemizedlist>
   Possible port names are: <quote>pri</quote> for
   <olink targetptr="primary_port"/>, <quote>sec</quote> for <olink
-  targetptr="secondary_port"/>, <quote>adm</quote> for <olink
-  targetptr="admin_port"/> and <quote>memcached</quote> for <olink
-  targetptr="memcached_port"/>.
+  targetptr="secondary_port"/> and <quote>adm</quote> for <olink
+  targetptr="admin_port"/>.
 </para>
 <para>
   For example:
diff --git a/doc/user/stored-procedures.xml b/doc/user/stored-procedures.xml
index 608d242c19bfc25830c5f65b75a32ec8cd8b66b6..a756ca3f60dbb24fd1994796f0c7b6e350881398 100644
--- a/doc/user/stored-procedures.xml
+++ b/doc/user/stored-procedures.xml
@@ -493,8 +493,8 @@ localhost> lua box.select(5, 1, 'firstname', 'lastname')
                     <member><code>:p</code> &mdash; splice a
                     field: start at offset, cut length bytes, and add a
                     string.</member>
-                    <member><code>#p</code> &mdash; delete a
-                    field.</member>
+                    <member><code>#p</code> &mdash; delete specified
+                    number of fields.</member>
                     <member><code>!p</code> &mdash; insert a field
                     (before the one specified).</member>
                 </simplelist>
@@ -529,6 +529,14 @@ localhost> lua box.update(0, 2, '#p', 2, 1)
 ---
  - 2: {'Bienvenue tout le monde!'}
 ...
+localhost> lua box.insert(0, 3, 'crocodile', 'giraffe', 'baobab', 'bamblebee', 'hippopotamus', 'rhino')
+---
+ - 3: {'crocodile', 'giraffe', 'baobab', 'bamblebee', 'hippopotamus', 'rhino'}
+...
+localhost> lua box.update(0, 3, '#p', 3, 2)
+---
+ - 3: {'crocodile', 'giraffe', 'hippopotamus', 'rhino'}
+...
 </programlisting>
             </para>
         </listitem>
diff --git a/include/errcode.h b/include/errcode.h
index 1af5bca5719130b24efa637be64092cd65b9cc67..a62b5df6ae64f3ea38f3308ace5e1c53015e6816 100644
--- a/include/errcode.h
+++ b/include/errcode.h
@@ -108,7 +108,7 @@ enum { TNT_ERRMSG_MAX = 512 };
 	/* 53 */_(ER_NO_SUCH_INDEX,		2, "No index #%u is defined in space %u") \
 	/* 54 */_(ER_NO_SUCH_FIELD,		2, "Field %u was not found in the tuple") \
 	/* 55 */_(ER_TUPLE_FOUND,		2, "Duplicate key exists in unique index %u") \
-	/* 56 */_(ER_UNUSED,		        2, "") \
+	/* 56 */_(ER_UPDATE_FIELD,	    2, "Field %u UPDATE error: %s") \
 	/* 57 */_(ER_NO_SUCH_SPACE,		2, "Space %u does not exist")
 
 
diff --git a/src/box/tuple_update.cc b/src/box/tuple_update.cc
index ae6bc51d3d0b9b7015016b72f55faa3db1fb4439..86d9740dd5a5abf33cb4059d079a2c941566f498 100644
--- a/src/box/tuple_update.cc
+++ b/src/box/tuple_update.cc
@@ -322,7 +322,27 @@ static void
 init_update_op_delete(struct tuple_update *update, struct update_op *op)
 {
 	op_adjust_field_no(op, rope_size(update->rope) - 1);
-	rope_erase(update->rope, op->field_no);
+
+	uint32_t delete_count = 1;
+	if (op->arg.set.length > 0) {
+		/* Check the operand type, if present. */
+		if (op->arg.set.length != sizeof(int32_t))
+			tnt_raise(ClientError, ER_ARG_TYPE,
+				  op->field_no, "NUM");
+
+		delete_count = *(int32_t *)op->arg.set.value;
+		if (delete_count == UINT32_MAX)
+			delete_count = rope_size(update->rope) - op->field_no;
+		else if (op->field_no + delete_count > rope_size(update->rope))
+			delete_count = rope_size(update->rope) - op->field_no;
+
+		if (delete_count == 0)
+			tnt_raise(ClientError, ER_UPDATE_FIELD,
+				  op->field_no, "cannot delete 0 fields");
+	}
+
+	for (uint32_t u = 0; u < delete_count; u++)
+		rope_erase(update->rope, op->field_no);
 }
 
 static void
@@ -524,10 +544,6 @@ update_calc_new_tuple_length(struct tuple_update *update)
 	}
 
 	update->new_tuple_fcount = rope_size(update->rope);
-
-	if (update->new_tuple_size > UINT32_MAX)
-		tnt_raise(ClientError, ER_TUPLE_IS_TOO_LONG,
-			  update->new_tuple_size);
 }
 
 static void
diff --git a/test/box/lua.result b/test/box/lua.result
index 1fe81ec1147bc29cf2766d7a9f61af5a207c0d66..964f54eab7d3b0bf100868a312022f777fd48030 100644
--- a/test/box/lua.result
+++ b/test/box/lua.result
@@ -1224,6 +1224,42 @@ box.update(0, 'tes5', '#p', 0, '')
 box.space[0]:truncate()
 ---
 ...
+box.insert(0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
+---
+- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
+...
+box.update(0, 0, '#p', 42, 1)
+---
+- error: Field 42 was not found in the tuple
+...
+box.update(0, 0, '#p', 3, 'abirvalg')
+---
+- error: 'Argument type in operation on field 3 does not match field type: expected
+    a NUM'
+...
+box.update(0, 0, '#p#p#p', 1, 1, 3, 2, 5, 1)
+---
+- [0, 2, 3, 6, 7, 9, 10, 11, 12, 13, 14, 15]
+...
+box.update(0, 0, '#p', 3, 3)
+---
+- [0, 2, 3, 10, 11, 12, 13, 14, 15]
+...
+box.update(0, 0, '#p', 4, 123456)
+---
+- [0, 2, 3, 10]
+...
+box.update(0, 0, '#p', 2, 4294967295)
+---
+- [0, 2]
+...
+box.update(0, 0, '#p', 1, 0)
+---
+- error: 'Field 1 UPDATE error: cannot delete 0 fields'
+...
+box.space[0]:truncate()
+---
+...
 
 # test box.update: INSERT field
 
diff --git a/test/box/lua.test.py b/test/box/lua.test.py
index 6bece921453f04eabc68e61e56b52a0c557d3afd..21d2deda0e70ef4848975c29d24296ed9af5324c 100644
--- a/test/box/lua.test.py
+++ b/test/box/lua.test.py
@@ -398,6 +398,17 @@ sql("call box.update('0', 'tes4', '#p', 0, '')")
 admin("box.update(0, 'tes5', '#p', 0, '')")
 admin("box.space[0]:truncate()")
 
+# test delete multiple fields
+admin("box.insert(0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)")
+admin("box.update(0, 0, '#p', 42, 1)")
+admin("box.update(0, 0, '#p', 3, 'abirvalg')")
+admin("box.update(0, 0, '#p#p#p', 1, 1, 3, 2, 5, 1)")
+admin("box.update(0, 0, '#p', 3, 3)")
+admin("box.update(0, 0, '#p', 4, 123456)")
+admin("box.update(0, 0, '#p', 2, 4294967295)")
+admin("box.update(0, 0, '#p', 1, 0)")
+admin("box.space[0]:truncate()")
+
 print """
 # test box.update: INSERT field
 """
diff --git a/test/box/lua_misc.result b/test/box/lua_misc.result
index c731595c6d44bffbe73a513fdfd04123be3c2e2a..a4cbf5703075b4339b8127be8bc952ea304d3399 100644
--- a/test/box/lua_misc.result
+++ b/test/box/lua_misc.result
@@ -153,6 +153,7 @@ t;
   - 'box.error.ER_MODIFY_INDEX : 6914'
   - 'box.error.ER_EXACT_MATCH : 11522'
   - 'box.error.ER_SECONDARY : 770'
+  - 'box.error.ER_UPDATE_FIELD : 14338'
   - 'box.error.ER_DROP_SPACE : 6146'
   - 'box.error.ER_UNKNOWN_UPDATE_OP : 11266'
   - 'box.error.ER_UNSUPPORTED : 2562'
diff --git a/third_party/memcached/COPYING b/third_party/memcached/COPYING
deleted file mode 100644
index 4746b00c326b9a010ffe0265d4facd1c1d6ee644..0000000000000000000000000000000000000000
--- a/third_party/memcached/COPYING
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2003, Danga Interactive, Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-
-    * Neither the name of the Danga Interactive nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/third_party/memcached/doc/CONTRIBUTORS b/third_party/memcached/doc/CONTRIBUTORS
deleted file mode 100644
index b87e5c604a28db3c3e5a0c2997f7ceb463698d5e..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/CONTRIBUTORS
+++ /dev/null
@@ -1,45 +0,0 @@
-MEMCACHED CONTRIBUTORS
-
-This file contains a list of people who have contributed code and
-effort to the memcached project.  If you don't see your name mentioned
-send email to the memcached mailing list so you can be immortalized.
-
-Also see the ChangeLog for even more people who have helped over the
-years by submitting fixes, patches and reporting bugs.
-
-
-Major authors:
---------------
-
-Brad Fitzpatrick <brad@danga.com>  -- maintainer, original implementations
-
-Anatoly Vorobey <mellon@pobox.com> -- lots of the modern server code
-
-Steven Grimm <sgrimm@facebook.com> -- iov writing (less CPU), UDP mode,
-                                        non-2.0 slab mantissas, multithread, ...
-
-Other Contributors
-------------------
-
-Evan Martin <evan@danga.com>
-Nathan Neulinger <nneul@umr.edu>
-Eric Hodel <drbrain@segment7.net>
-Michael Johnson <ahze@ahze.net>
-Paul Querna <chip@corelands.com>
-Jamie McCarthy <jamie@mccarthy.vg>
-Philip Neustrom <philipn@gmail.com>
-Andrew O'Brien <andrewo@oriel.com.au>
-Josh Rotenberg <joshrotenberg@gmail.com>
-Robin H. Johnson <robbat2@gentoo.org>
-Tim Yardley <liquid@haveheart.com>
-Paolo Borelli <paolo.borelli@gmail.com>
-Eli Bingham <eli@pandora.com>
-Jean-Francois Bustarret <jfbustarret@wat.tv>
-Paul G <paul-lists@perforge.com>
-Paul Lindner <lindner@inuus.com>
-Dormando <dormando@rydia.net>
-Dustin Sallings <dustin@spy.net>
-Chris Goffinet <goffinet@yahoo-inc.com>
-Tomash Brechko <tomash.brechko@gmail.com>
-Brian Aker <brian@tangent.org>
-Trond Norbye <trond.norbye@sun.com>
diff --git a/third_party/memcached/doc/Doxyfile b/third_party/memcached/doc/Doxyfile
deleted file mode 100644
index e1b4afb3810bc65e259753e56d79ac0d2136a63a..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/Doxyfile
+++ /dev/null
@@ -1,1258 +0,0 @@
-# Doxyfile 1.5.2
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = memcached
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER         = 0.8
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = doxygen
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = NO
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = YES
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = YES
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS       = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT                  = ..
-
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
-FILE_PATTERNS          = *.h \
-                         *.c
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                = config.h
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN           = YES
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen will always
-# show the root nodes and its direct children regardless of this setting.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
diff --git a/third_party/memcached/doc/Makefile b/third_party/memcached/doc/Makefile
deleted file mode 100644
index 9942940aadf3bd12b7d95f7ec19ede3b06cbfb2e..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/Makefile
+++ /dev/null
@@ -1,387 +0,0 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
-# doc/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-pkgdatadir = $(datadir)/memcached
-pkglibdir = $(libdir)/memcached
-pkgincludedir = $(includedir)/memcached
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-target_triplet = x86_64-unknown-linux-gnu
-#am__append_1 = protocol-binary.txt protocol-binary-range.txt
-subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/version.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-man1dir = $(mandir)/man1
-am__installdirs = "$(DESTDIR)$(man1dir)"
-NROFF = nroff
-MANS = $(man_MANS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run aclocal-1.10
-AMTAR = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run tar
-AUTOCONF = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run autoconf
-AUTOHEADER = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run autoheader
-AUTOMAKE = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run automake-1.10
-AWK = gawk
-CC = gcc -std=gnu99
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2 -pthread -Wall -Werror -pedantic -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-CPP = gcc -E
-CPPFLAGS = 
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-DTRACE = 
-DTRACEFLAGS = 
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = /bin/grep -E
-EXEEXT = 
-GREP = /bin/grep
-INSTALL = /usr/bin/install -c
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
-LDFLAGS = 
-LIBOBJS = 
-LIBS =  -levent
-LTLIBOBJS = 
-MAKEINFO = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run makeinfo
-MKDIR_P = /usr/bin/mkdir -p
-OBJEXT = o
-PACKAGE = memcached
-PACKAGE_BUGREPORT = brad@danga.com
-PACKAGE_NAME = memcached
-PACKAGE_STRING = memcached 1.4.2
-PACKAGE_TARNAME = memcached
-PACKAGE_VERSION = 1.4.2
-PATH_SEPARATOR = :
-PROFILER = /usr/bin/gcov
-PROFILER_FLAGS = -fprofile-arcs -ftest-coverage
-PROFILER_LDFLAGS = -lgcov
-SET_MAKE = 
-SHELL = /bin/sh
-STRIP = 
-VERSION = 1.4.2
-XML2RFC = no
-XSLTPROC = /usr/bin/xsltproc
-abs_builddir = /home/dormando/p/danga/memcached_github_new/doc
-abs_srcdir = /home/dormando/p/danga/memcached_github_new/doc
-abs_top_builddir = /home/dormando/p/danga/memcached_github_new
-abs_top_srcdir = /home/dormando/p/danga/memcached_github_new
-ac_ct_CC = gcc
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-builddir = .
-datadir = ${datarootdir}
-datarootdir = ${prefix}/share
-docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
-dvidir = ${docdir}
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-htmldir = ${docdir}
-includedir = ${prefix}/include
-infodir = ${datarootdir}/info
-install_sh = $(SHELL) /home/dormando/p/danga/memcached_github_new/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localedir = ${datarootdir}/locale
-localstatedir = ${prefix}/var
-mandir = ${datarootdir}/man
-mkdir_p = /usr/bin/mkdir -p
-oldincludedir = /usr/include
-pdfdir = ${docdir}
-prefix = /usr/local
-program_transform_name = s,x,x,
-psdir = ${docdir}
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-srcdir = .
-sysconfdir = ${prefix}/etc
-target = x86_64-unknown-linux-gnu
-target_alias = 
-target_cpu = x86_64
-target_os = linux-gnu
-target_vendor = unknown
-top_build_prefix = ../
-top_builddir = ..
-top_srcdir = ..
-man_MANS = memcached.1
-EXTRA_DIST = *.txt
-BUILT_SOURCES = $(am__append_1)
-#MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  doc/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign  doc/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-man1: $(man1_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $$i; then file=$$i; \
-	  else file=$(srcdir)/$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(MANS)
-installdirs:
-	for dir in "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man: install-man1
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man
-
-uninstall-man: uninstall-man1
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-man1 install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
-	uninstall-am uninstall-man uninstall-man1
-
-
-%.txt: %.full
-	no $< $@
-
-%.chk: %.xml xml2rfc/rfc2629-refchk.xsl
-	/usr/bin/xsltproc xml2rfc/rfc2629-refchk.xsl $< >$@
-
-%.full: %.xml xml2rfc/rfc2629-noinc.xsl
-	/usr/bin/xsltproc xml2rfc/rfc2629-noinc.xsl $< >$@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/third_party/memcached/doc/Makefile.am b/third_party/memcached/doc/Makefile.am
deleted file mode 100644
index f9f4f463df77b01b8084b9217257ebc0f3bb8bd0..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-man_MANS = memcached.1
-
-EXTRA_DIST = *.txt
-
-BUILT_SOURCES=
-
-if BUILD_SPECIFICATIONS
-BUILT_SOURCES += protocol-binary.txt protocol-binary-range.txt
-MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt
-endif
-
-%.txt: %.full
-	@XML2RFC@ $< $@
-
-%.chk: %.xml xml2rfc/rfc2629-refchk.xsl
-	@XSLTPROC@ xml2rfc/rfc2629-refchk.xsl $< >$@
-
-%.full: %.xml xml2rfc/rfc2629-noinc.xsl
-	@XSLTPROC@ xml2rfc/rfc2629-noinc.xsl $< >$@
-
diff --git a/third_party/memcached/doc/Makefile.in b/third_party/memcached/doc/Makefile.in
deleted file mode 100644
index 3daa23054a28243fee6c52f9615ee397187000ba..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/Makefile.in
+++ /dev/null
@@ -1,387 +0,0 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-@BUILD_SPECIFICATIONS_TRUE@am__append_1 = protocol-binary.txt protocol-binary-range.txt
-subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/version.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-man1dir = $(mandir)/man1
-am__installdirs = "$(DESTDIR)$(man1dir)"
-NROFF = nroff
-MANS = $(man_MANS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DTRACE = @DTRACE@
-DTRACEFLAGS = @DTRACEFLAGS@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PROFILER = @PROFILER@
-PROFILER_FLAGS = @PROFILER_FLAGS@
-PROFILER_LDFLAGS = @PROFILER_LDFLAGS@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XML2RFC = @XML2RFC@
-XSLTPROC = @XSLTPROC@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-man_MANS = memcached.1
-EXTRA_DIST = *.txt
-BUILT_SOURCES = $(am__append_1)
-@BUILD_SPECIFICATIONS_TRUE@MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  doc/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign  doc/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-man1: $(man1_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $$i; then file=$$i; \
-	  else file=$(srcdir)/$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(MANS)
-installdirs:
-	for dir in "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man: install-man1
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man
-
-uninstall-man: uninstall-man1
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-man1 install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
-	uninstall-am uninstall-man uninstall-man1
-
-
-%.txt: %.full
-	@XML2RFC@ $< $@
-
-%.chk: %.xml xml2rfc/rfc2629-refchk.xsl
-	@XSLTPROC@ xml2rfc/rfc2629-refchk.xsl $< >$@
-
-%.full: %.xml xml2rfc/rfc2629-noinc.xsl
-	@XSLTPROC@ xml2rfc/rfc2629-noinc.xsl $< >$@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/third_party/memcached/doc/memcached.1 b/third_party/memcached/doc/memcached.1
deleted file mode 100644
index ee01a02783c26be80c9783dc584ba47c8dcf5318..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/memcached.1
+++ /dev/null
@@ -1,143 +0,0 @@
-.TH MEMCACHED 1 "April 11, 2005"
-.SH NAME
-memcached \- high-performance memory object caching system
-.SH SYNOPSIS
-.B memcached
-.RI [ options ]
-.br
-.SH DESCRIPTION
-This manual page documents briefly the
-.B memcached
-memory object caching daemon.
-.PP
-.B memcached
-is a flexible memory object caching daemon designed to alleviate database load
-in dynamic web applications by storing objects in memory.  It's based on
-libevent to scale to any size needed, and is specifically optimized to avoid
-swapping and always use non-blocking I/O.
-.br
-.SH OPTIONS
-These programs follow the usual GNU command line syntax. A summary of options
-is included below.
-.TP
-.B \-s <file>
-Unix socket path to listen on (disables network support).
-.TP
-.B \-a <perms>
-Permissions (in octal format) for Unix socket created with \-s option.
-.TP
-.B \-l <ip_addr>
-Listen on <ip_addr>; default to INADDR_ANY. This is an important option to
-consider as there is no other way to secure the installation. Binding to an
-internal or firewalled network interface is suggested.
-.TP
-.B \-d
-Run memcached as a daemon.
-.TP
-.B \-u <username>
-Assume the identity of <username> (only when run as root).
-.TP
-.B \-m <num>
-Use <num> MB memory max to use for object storage; the default is 64 megabytes.
-.TP
-.B \-c <num>
-Use <num> max simultaneous connections; the default is 1024.
-.TP
-.B \-R <num>
-This option seeks to prevent client starvation by setting a limit to the
-number of sequential requests the server will process from an individual
-client connection. Once a connection has exceeded this value, the server will
-attempt to process I/O on other connections before handling any further
-request from this connection. The default value for this option is 20.
-.TP
-.B \-k
-Lock down all paged memory. This is a somewhat dangerous option with large
-caches, so consult the README and memcached homepage for configuration
-suggestions.
-.TP
-.B \-p <num>
-Listen on TCP port <num>, the default is port 11211.
-.TP
-.B \-U <num>
-Listen on UDP port <num>, the default is port 11211, 0 is off.
-.TP
-.B \-M
-Disable automatic removal of items from the cache when out of memory.
-Additions will not be possible until adequate space is freed up.
-.TP
-.B \-r
-Raise the core file size limit to the maximum allowable.
-.TP
-.B \-f <factor>
-Use <factor> as the multiplier for computing the sizes of memory chunks that
-items are stored in. A lower value may result in less wasted memory depending
-on the total amount of memory available and the distribution of item sizes.
-The default is 1.25.
-.TP
-.B \-n <size>
-Allocate a minimum of <size> bytes for the item key, value, and flags. The
-default is 48. If you have a lot of small keys and values, you can get a
-significant memory efficiency gain with a lower value. If you use a high
-chunk growth factor (\-f option), on the other hand, you may want to increase
-the size to allow a bigger percentage of your items to fit in the most densely
-packed (smallest) chunks.
-.TP
-.B \-C
-Disable the use of CAS (and reduce the per-item size by 8 bytes).
-.TP
-.B \-h
-Show the version of memcached and a summary of options.
-.TP
-.B \-v
-Be verbose during the event loop; print out errors and warnings.
-.TP
-.B \-vv
-Be even more verbose; same as \-v but also print client commands and
-responses.
-.TP
-.B \-i
-Print memcached and libevent licenses.
-.TP
-.B \-P <filename>
-Print pidfile to <filename>, only used under \-d option.
-.TP
-.B \-t <threads>
-Number of threads to use to process incoming requests. This option is only
-meaningful if memcached was compiled with thread support enabled. It is
-typically not useful to set this higher than the number of CPU cores on the
-memcached server. The default is 4.
-.TP
-.B \-D <char>
-Use <char> as the delimiter between key prefixes and IDs. This is used for
-per-prefix stats reporting. The default is ":" (colon). If this option is
-specified, stats collection is turned on automatically; if not, then it may
-be turned on by sending the "stats detail on" command to the server.
-.TP
-.B \-L
-Try to use large memory pages (if available). Increasing the memory page size
-could reduce the number of TLB misses and improve the performance. In order to
-get large pages from the OS, memcached will allocate the total item-cache in
-one large chunk. Only available if supported on your OS.
-.TP
-.B \-B <proto>
-Specify the binding protocol to use.  By default, the server will
-autonegotiate client connections.  By using this option, you can
-specify the protocol clients must speak.  Possible options are "auto"
-(the default, autonegotiation behavior), "ascii" and "binary".
-.br
-.SH LICENSE
-The memcached daemon is copyright Danga Interactive and is distributed under
-the BSD license. Note that daemon clients are licensed separately.
-.br
-.SH SEE ALSO
-The README file that comes with memcached
-.br
-.B http://www.danga.com/memcached
-.SH AUTHOR
-The memcached daemon was written by Anatoly Vorobey
-.B <mellon@pobox.com>
-and Brad Fitzpatrick
-.B <brad@danga.com>
-and the rest of the crew of Danga Interactive
-.B http://www.danga.com
-.br
diff --git a/third_party/memcached/doc/memory_management.txt b/third_party/memcached/doc/memory_management.txt
deleted file mode 100644
index 9a22d6a02d380dee9f563a9268a9f4e3c14852fb..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/memory_management.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-Date: Tue, 20 Feb 2008
-From: Trond Norbye <trond.norbye@sun.com>
-
-When started with -L memcached will try to enable large memory
-pages, and preallocate all memory up front. By using large memory
-pages memcached could reduce the number of TLB misses (depending
-on the access pattern), and hence improve performance.
-
-See http://en.wikipedia.org/wiki/Translation_lookaside_buffer for
-a description of TLB.
-
-Date: Fri, 5 Sep 2003 20:31:03 +0300
-From: Anatoly Vorobey <mellon@pobox.com>
-To: memcached@lists.danga.com
-Subject: Re: Memory Management...
-
-On Fri, Sep 05, 2003 at 12:07:48PM -0400, Kyle R. Burton wrote:
-> prefixing keys with a container identifier).  We have just begun to
-> look at the implementation of the memory management sub-system with
-> regards to it's allocation, de-allocation and compaction approaches.
-> Is there any documentation or discussion of how this subsystem
-> operates? (slabs.c?)
-
-There's no documentation yet, and it's worth mentioning that this
-subsystem is the most active area of memcached under development at the
-moment (however, all the changes to it won't modify the way memcached
-presents itself towards clients, they're primarily directed at making
-memcached use memory more efficiently).
-
-Here's a quick recap of what it does now and what is being worked
-on.
-
-The primary goal of the slabs subsystem in memcached was to eliminate
-memory fragmentation issues totally by using fixed-size memory chunks
-coming from a few predetermined size classes (early versions of
-memcached relied on malloc()'s handling of fragmentation which proved
-woefully inadequate for our purposes). For instance, suppose
-we decide at the outset that the list of possible sizes is: 64 bytes,
-128 bytes, 256 bytes, etc. - doubling all the way up to 1Mb. For each
-size class in this list (each possible size) we maintain a list of free
-chunks of this size. Whenever a request comes for a particular size,
-it is rounded up to the closest size class and a free chunk is taken
-from that size class. In the above example, if you request from the
-slabs subsystem 100 bytes of memory, you'll actually get a chunk 128
-bytes worth, from the 128-bytes size class. If there are no free chunks
-of the needed size at the moment, there are two ways to get one: 1) free
-an existing chunk in the same size class, using LRU queues to free the
-least needed objects; 2) get more memory from the system, which we
-currently always do in _slabs_ of 1Mb each; we malloc() a slab, divide
-it to chunks of the needed size, and use them.
-
-The tradeoff is between memory fragmentation and memory utilisation. In
-the scheme we're now using, we have zero fragmentation, but a relatively
-high percentage of memory is wasted. The most efficient way to reduce
-the waste is to use a list of size classes that closely matches (if
-that's at all possible) common sizes of objects that the clients
-of this particular installation of memcached are likely to store.
-For example, if your installation is going to store hundreds of
-thousands of objects of the size exactly 120 bytes, you'd be much better
-off changing, in the "naive" list of sizes outlined above, the class
-of 128 bytes to something a bit higher (because the overhead of
-storing an item, while not large, will push those 120-bytes objects over
-128 bytes of storage internally, and will require using 256 bytes for
-each of them in the naive scheme, forcing you to waste almost 50% of
-memory). Such tinkering with the list of size classes is not currently
-possible with memcached, but enabling it is one of the immediate goals.
-
-Ideally, the slabs subsystem would analyze at runtime the common sizes
-of objects that are being requested, and would be able to modify the
-list of sizes dynamically to improve memory utilisation. This is not
-planned for the immediate future, however. What is planned is the
-ability to reassign slabs to different classes. Here's what this means.
-Currently, the total amount of memory allocated for each size class is
-determined by how clients interact with memcached during the initial
-phase of its execution, when it keeps malloc()'ing more slabs and
-dividing them into chunks, until it hits the specified memory limit
-(say, 2Gb, or whatever else was specified). Once it hits the limit, to
-allocate a new chunk it'll always delete an existing chunk of the same
-size (using LRU queues), and will never malloc() or free() any memory
-from/to the system. So if, for example, during those initial few hours
-of memcached's execution your clients mainly wanted to store very small
-items, the bulk of memory allocated will be divided to small-sized
-chunks, and the large size classes will get fewer memory, therefore the
-life-cycle of large objects you'll store in memcached will henceforth
-always be much shorter, with this instance of memcached (their LRU
-queues will be shorter and they'll be pushed out much more often). In
-general, if your system starts producing a different pattern of common
-object sizes, the memcached servers will become less efficient, unless
-you restart them. Slabs reassignment, which is the next feature being
-worked on, will ensure the server's ability to reclaim a slab (1Mb of
-memory) from one size  class and put it into another class size, where
-it's needed more.
-
---
-avva
diff --git a/third_party/memcached/doc/protocol-binary-range.xml b/third_party/memcached/doc/protocol-binary-range.xml
deleted file mode 100644
index 02711a8410c0542efa8f3f4ececf1a9426288306..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/protocol-binary-range.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="US-ASCII"?>
-<!DOCTYPE rfc SYSTEM "xml2rfc/rfc2629.dtd">
-<?xml-stylesheet type='text/xsl' href='xml2rfc/rfc2629.xslt'?>
-<?rfc toc="yes"?>
-<?rfc strict="yes"?>
-<?rfc symrefs="yes"?>
-<?rfc sortrefs="yes" ?>
-<?rfc compact="yes" ?>
-<?rfc subcompact="yes" ?>
-<rfc category="info" docName="draft-stone-memcache-udp-01" ipr="none">
-
-  <front>
-
-    <title abbrev="Memcache Over UDP"> Memcache Binary Protocol: Extensions for UDP </title>
-
-    <author fullname="Aaron Stone" surname="Aaron Stone" role="editor">
-      <organization>Six Apart, Ltd.</organization>
-      <address>
-        <postal>
-          <street>548 4th Street</street>
-          <city>San Francisco</city>
-          <region>CA</region>
-          <code>94107</code>
-          <country>USA</country>
-        </postal>
-        <email>aaron@serendipity.palo-alto.ca.us</email>
-      </address>
-    </author>
-
-    <date day="14" month="December" year="2007" />
-
-    <area>Applications</area>
-
-    <keyword>memcache memcached cache udp</keyword>
-
-    <abstract>
-      <t>
-      This memo explains extensions to the memcache binary protocol for use in a UDP environment.
-      </t>
-
-      <t>
-      Memcache is a high performance key-value cache. It is intentionally a
-      dumb cache, optimized for speed only. Applications using memcache do
-      not rely on it for data -- a persistent database with guaranteed reliability
-      is strongly recommended -- but applications can run much faster when
-      cached data is available in memcache.
-      </t>
-    </abstract>
-  </front>
-
-  <middle>
-    <section anchor="introduction" title="Introduction">
-      <t>
-      Memcache is a high performance key-value cache. It is intentionally a
-      dumb cache, optimized for speed only. Applications using memcache do
-      not rely on it for data -- a persistent database with guaranteed reliability
-      is strongly recommended -- but applications can run much faster when
-      cached data is available in memcache.
-      </t>
-      <t>
-      Sites may find that, due to their network architecture or application usage patterns,
-      the stateless <xref target="UDP"/> protocol better suits their needs. This document
-      provides extensions and descriptions of use of the <xref target="MEMCACHE">memcache protocol</xref>
-      in a UDP environment.
-      </t>
-      <t>
-      It is a goal of this document to provide sufficient information in each UDP packet
-      as to avoid any requirement for statefulness on the part of the server nor significant
-      caching of outstanding packets on the part of the client.
-      </t>
-      <section anchor="conventions" title="Conventions Used In This Document">
-        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-        document are to be interpreted as described in <xref target="KEYWORDS"/>.
-        </t>
-      </section>
-    </section>
-
-    <section anchor="values" title="Defined Values">
-      <section anchor="value-magic" title="Magic Byte">
-        <t>
-        The magic bytes remains the same as in <xref target="MEMCACHE"/>.
-        </t>
-      </section>
-
-      <section anchor="value-status" title="Response Status">
-        <t>
-        Additional status values:
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x0004">Value is larger than a single response packet</t>
-        </list>
-        </t>
-      </section>
-
-      <section anchor="value-opcodes" title="Command Opcodes">
-        <t>
-        Additional opcode values:
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x0C">Get Range</t>
-          <t hangText="0x0D">Set Range</t>
-        </list>
-        </t>
-      </section>
-
-      <section anchor="value-types" title="Data Types">
-        <t>
-        There are no new data types in this extension.
-        </t>
-      </section>
-    </section>
-
-    <section anchor="commands" title="Commands">
-
-      <section anchor="command-get" title="Get Response">
-        <t>
-        This section extends the behavior of the Get and GetQ commands as described in
-        <xref target="MEMCACHE" x:sec="command-get"/>.
-        </t>
-
-        <t>
-        When a Get or GetQ request is made via UDP, and the value of the key for which
-        the request was made is larger than can be placed into a single UDP packet (noting
-        that the protocol header must also be counted), a Get Range response packet
-        MUST be sent instead of the Get response packet. In this instance:
-        <list style="numbers">
-          <t>The Status field of the response header MUST be 0x0004.</t>
-          <t>The Offset field of the GetR response extras MUST be 0.</t>
-          <t>The Length field of the GetR response extras, and the data contained in
-             the Value field of the packet, SHOULD be the maximum
-             allowed length of a UDP packet, less the space required by the header
-             and extras; however it MAY be any amount below this maximum.</t>
-          <t>The Total value length field of the response extras MUST be the
-             actual length of the complete value.</t>
-        </list>
-        </t>
-
-        <t>
-        The client, upon receipt of a Get Range response bearing Status 0x004
-        and a Message ID corresponding to its Get request, shall then know that
-        it has received only the first portion of the value. The client MAY choose
-        to request the remaining portion of the value by sending one or more Get Range requests.
-        </t>
-      </section>
-
-      <section anchor="command-getr-request" title="Get Range Request">
-        <t>
-	  The Get Range request is primarily intended for use over a UDP transport
-	  to request byte ranges of the value for a key. In the event that the Data version
-	  check fails to match that of the key, an error MUST be returned.
-	</t>
-        <t>
-      <figure>
-        <preamble>Extra data for get range request:</preamble>
-          <artwork>
-Byte/     0       |       1       |       2       |       3       |
-   /              |               |               |               |
-  |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-  +---------------+---------------+---------------+---------------+
- 0| Flags                                                         |
-  +---------------+---------------+---------------+---------------+
- 4| Data version check                                            |
-  |                                                               |
-  +---------------+---------------+---------------+---------------+
-12| Offset                                                        |
-  +---------------+---------------+---------------+---------------+
-16| Length                                                        |
-  +---------------+---------------+---------------+---------------+
-Total 20 bytes
-      </artwork></figure>
-        </t>
-      </section>
-
-      <section anchor="command-getr-response" title="Get Range Response">
-        <t>
-	  The Get Range request is primarily intended for use over a UDP transport
-	  to indicate the location of the bytes of the value for a key contained in
-	  a given packet. A client receives enough information in each Get Range
-	  extras to construct an appropriately sized buffer in its own memory and
-	  blindly insert the contents of the packet at the given byte offset.
-	</t>
-        <t>
-      <figure>
-        <preamble>Extra data for get range response:</preamble>
-          <artwork>
-Byte/     0       |       1       |       2       |       3       |
-   /              |               |               |               |
-  |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-  +---------------+---------------+---------------+---------------+
- 0| Flags                                                         |
-  +---------------+---------------+---------------+---------------+
- 4| Data version check                                            |
-  |                                                               |
-  +---------------+---------------+---------------+---------------+
-12| Offset                                                        |
-  +---------------+---------------+---------------+---------------+
-16| Length                                                        |
-  +---------------+---------------+---------------+---------------+
-20| Total value length                                            |
-  +---------------+---------------+---------------+---------------+
-Total 24 bytes
-      </artwork></figure>
-        </t>
-      </section>
-
-    </section>
-
-    <section anchor="security" title="Security Considerations">
-      <t>
-      This document does not introduce any new security considerations
-      beyond those discussed in <xref target="MEMCACHE" x:sec="security"/>.
-      </t>
-    </section>
-
-  </middle>
-
-  <back>
-    <references title="Normative References">
-      <dwdrfc-ref anchor='UDP' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml'/>
-      <dwdrfc-ref anchor='KEYWORDS' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/>
-      <!-- FIXME: Get a draft reference for the base document. -->
-      <dwdrfc-ref anchor='MEMCACHE' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/>
-    </references>
-  </back>
-
-</rfc>
-
diff --git a/third_party/memcached/doc/protocol-binary.xml b/third_party/memcached/doc/protocol-binary.xml
deleted file mode 100644
index 96957ad0fc5869bfe2a1c4208c2d12326ff6d817..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/protocol-binary.xml
+++ /dev/null
@@ -1,1467 +0,0 @@
-<?xml version="1.0" encoding="US-ASCII"?>
-<!DOCTYPE rfc SYSTEM "xml2rfc/rfc2629.dtd">
-<?xml-stylesheet type='text/xsl' href='xml2rfc/rfc2629.xslt'?>
-<?rfc toc="yes"?>
-<?rfc strict="yes"?>
-<?rfc symrefs="yes"?>
-<?rfc sortrefs="yes" ?>
-<?rfc compact="yes" ?>
-<?rfc subcompact="yes" ?>
-<rfc category="info" docName="draft-stone-memcache-binary-01" ipr="none">
-  <front>
-    <title> Memcache Binary Protocol </title>
-
-    <author fullname="Aaron Stone" surname="Stone" role="editor">
-      <organization>Six Apart, Ltd.</organization>
-      <address>
-        <postal>
-          <street>548 4th Street</street>
-          <city>San Francisco</city>
-          <region>CA</region>
-          <code>94107</code>
-          <country>USA</country>
-        </postal>
-        <email>aaron@serendipity.palo-alto.ca.us</email>
-      </address>
-    </author>
-    <author fullname="Trond Norbye" surname="Norbye" role="editor">
-      <organization>Sun Microsystems, INC</organization>
-      <address>
-        <postal>
-          <street>Haakon VII g. 7B</street>
-          <city>Trondheim</city>
-          <code>NO-7485 Trondheim</code>
-          <country>Norway</country>
-        </postal>
-        <email>trond.norbye@sun.com</email>
-      </address>
-    </author>
-    <date day="28" month="August" year="2008" />
-    <area>Applications</area>
-    <keyword>memcache memcached cache</keyword>
-    <abstract>
-      <t>
-        This memo explains the memcache binary protocol for informational
-        purposes.
-      </t>
-      <t>
-        Memcache is a high performance key-value cache. It is intentionally a
-        dumb cache, optimized for speed only. Applications using memcache do
-        not rely on it for data -- a persistent database with guaranteed
-        reliability is strongly recommended -- but applications can run much
-        faster when cached data is available in memcache.
-      </t>
-    </abstract>
-  </front>
-
-  <middle>
-    <section anchor="introduction" title="Introduction">
-      <t>
-        Memcache is a high performance key-value cache. It is intentionally a
-        dumb cache, optimized for speed only. Applications using memcache should
-        not rely on it for data -- a persistent database with guaranteed
-        reliability is strongly recommended -- but applications can run much
-        faster when cached data is available in memcache.
-      </t>
-      <t>
-        Memcache was originally written to make
-        <xref target="LJ">LiveJournal</xref> faster. It now powers all of
-        the fastest web sites that you love.
-      </t>
-      <section anchor="conventions" title="Conventions Used In This Document">
-        <t>
-          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-          "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-          document are to be interpreted as described in
-          <xref target="KEYWORDS"/>.
-        </t>
-      </section>
-    </section>
-
-    <section anchor="packet" title="Packet Structure">
-      <figure>
-        <preamble>General format of a packet:</preamble>
-        <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0/ HEADER                                                        /
-    /                                                               /
-    /                                                               /
-    /                                                               /
-    +---------------+---------------+---------------+---------------+
-  24/ COMMAND-SPECIFIC EXTRAS (as needed)                           /
-   +/  (note length in the extras length header field)              /
-    +---------------+---------------+---------------+---------------+
-   m/ Key (as needed)                                               /
-   +/  (note length in key length header field)                     /
-    +---------------+---------------+---------------+---------------+
-   n/ Value (as needed)                                             /
-   +/  (note length is total body length header field, minus        /
-   +/   sum of the extras and key length body fields)               /
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-        </artwork>
-      </figure>
-
-      <figure>
-        <preamble>Request header:</preamble>
-        <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Magic         | Opcode        | Key length                    |
-    +---------------+---------------+---------------+---------------+
-   4| Extras length | Data type     | Reserved                      |
-    +---------------+---------------+---------------+---------------+
-   8| Total body length                                             |
-    +---------------+---------------+---------------+---------------+
-  12| Opaque                                                        |
-    +---------------+---------------+---------------+---------------+
-  16| CAS                                                           |
-    |                                                               |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-        </artwork>
-      </figure>
-
-      <figure>
-        <preamble>Response header:</preamble>
-        <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Magic         | Opcode        | Key Length                    |
-    +---------------+---------------+---------------+---------------+
-   4| Extras length | Data type     | Status                        |
-    +---------------+---------------+---------------+---------------+
-   8| Total body length                                             |
-    +---------------+---------------+---------------+---------------+
-  12| Opaque                                                        |
-    +---------------+---------------+---------------+---------------+
-  16| CAS                                                           |
-    |                                                               |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-        </artwork>
-      </figure>
-
-      <t>
-        Header fields:
-        <list hangIndent="20" style="hanging">
-          <t hangText="Magic">Magic number.</t>
-          <t hangText="Opcode">Command code.</t>
-          <t hangText="Key length">Length in bytes of the text key that follows the command extras.</t>
-          <t hangText="Status">Status of the response (non-zero on error).</t>
-          <t hangText="Extras length">Length in bytes of the command extras.</t>
-          <t hangText="Data type">Reserved for future use (Sean is using this soon).</t>
-          <t hangText="Reserved">Really reserved for future use (up for grabs).</t>
-          <t hangText="Total body length">Length in bytes of extra + key + value.</t>
-          <t hangText="Opaque">Will be copied back to you in the response.</t>
-          <t hangText="CAS">Data version check.</t>
-        </list>
-      </t>
-    </section>
-
-    <section anchor="values" title="Defined Values">
-      <section anchor="value-magic" title="Magic Byte">
-        <t>
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x80">Request packet for this protocol version</t>
-          <t hangText="0x81">Response packet for this protocol version</t>
-        </list>
-        </t>
-
-        <t>
-          Magic byte / version. For each version of the protocol, we'll use a
-          different request/response value pair. This is useful for protocol
-          analyzers to distinguish the nature of the packet from the direction
-          which it is moving. Note, it is common to run a memcached instance on
-	  a host that also runs an application server. Such a host will both
-	  send and receive memcache packets.
-        </t>
-
-        <t>
-          The version should hopefully correspond only to different meanings of
-          the command byte. In an ideal world, we will not change the header
-          format. As reserved bytes are given defined meaning, the protocol
-          version / magic byte values should be incremented.
-        </t>
-
-        <t>
-          Traffic analysis tools are encouraged to identify memcache packets
-          and provide detailed interpretation if the magic bytes are recognized
-          and otherwise to provide a generic breakdown of the packet. Note, that
-          the key and value positions can always be identified even if the magic
-          byte or command opcode are not recognized.
-        </t>
-      </section>
-
-      <section anchor="value-status" title="Response Status">
-        <t>
-        Possible values of this two-byte field:
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x0000">No error</t>
-          <t hangText="0x0001">Key not found</t>
-          <t hangText="0x0002">Key exists</t>
-          <t hangText="0x0003">Value too large</t>
-          <t hangText="0x0004">Invalid arguments</t>
-          <t hangText="0x0005">Item not stored</t>
-          <t hangText="0x0006">Incr/Decr on non-numeric value.</t>
-          <t hangText="0x0081">Unknown command</t>
-          <t hangText="0x0082">Out of memory</t>
-        </list>
-        </t>
-      </section>
-
-      <section anchor="value-opcodes" title="Command Opcodes">
-        <t>
-        Possible values of the one-byte field:
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x00">Get</t>
-          <t hangText="0x01">Set</t>
-          <t hangText="0x02">Add</t>
-          <t hangText="0x03">Replace</t>
-          <t hangText="0x04">Delete</t>
-          <t hangText="0x05">Increment</t>
-          <t hangText="0x06">Decrement</t>
-          <t hangText="0x07">Quit</t>
-          <t hangText="0x08">Flush</t>
-          <t hangText="0x09">GetQ</t>
-          <t hangText="0x0A">No-op</t>
-          <t hangText="0x0B">Version</t>
-          <t hangText="0x0C">GetK</t>
-          <t hangText="0x0D">GetKQ</t>
-          <t hangText="0x0E">Append</t>
-          <t hangText="0x0F">Prepend</t>
-	  <t hangText="0x10">Stat</t>
-          <t hangText="0x11">SetQ</t>
-          <t hangText="0x12">AddQ</t>
-          <t hangText="0x13">ReplaceQ</t>
-          <t hangText="0x14">DeleteQ</t>
-          <t hangText="0x15">IncrementQ</t>
-          <t hangText="0x16">DecrementQ</t>
-          <t hangText="0x17">QuitQ</t>
-          <t hangText="0x18">FlushQ</t>
-          <t hangText="0x19">AppendQ</t>
-          <t hangText="0x1A">PrependQ</t>
-        </list>
-        </t>
-	      <t>
-	        As a convention all of the commands ending with "Q" for
-	        Quiet.  A quiet version of a command will omit responses
-	        that are considered uninteresting.  Whether a given response
-	        is interesting is dependent upon the command.  See the
-	        descriptions of the
-	        <xref target="command-get">set commands</xref>
-	        and <xref target="command-set">set commands</xref> for
-	        examples of commands that include quiet variants.
-	      </t>
-      </section>
-
-      <section anchor="value-types" title="Data Types">
-        <t>
-        Possible values of the one-byte field:
-        <list hangIndent="8" style="hanging">
-          <t hangText="0x00">Raw bytes</t>
-        </list>
-        </t>
-      </section>
-    </section>
-
-    <section title="Commands">
-      <section anchor="command-introduction" title="Introduction">
-        <t>
-        All communication is initiated by a request from the client,
-        and the server will respond to each request with zero or
-	multiple packets for each request. If the status code of a response
-	packet is non-nil, the body of the packet will contain a textual error
-	message. If the status code is nil, the command opcode will define the
-	layout of the body of the message.
-        </t>
-        <section anchor="command-introduction-example" title="Example">
-            <t>
-                The following figure illustrates the packet layout for
-                a packet with an error message.
-            </t>
-          <figure>
-            <preamble>Packet layout:</preamble>
-            <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x01          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x09          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x4e ('N')    | 0x6f ('o')    | 0x74 ('t')    | 0x20 (' ')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x66 ('f')    | 0x6f ('o')    | 0x75 ('u')    | 0x6e ('n')    |
-    +---------------+---------------+---------------+---------------+
-  32| 0x64 ('d')    |
-    +---------------+
-    Total 33 bytes (24 byte header, and 9 bytes value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x00
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0001
-Total body   (8-11) : 0x00000009
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : None
-Value        (24-32): The textual string "Not found"
-            </artwork>
-          </figure>
-        </section>
-      </section>
-
-      <section anchor="command-get" title="Get, Get Quietly, Get Key, Get Key Quietly">
-        <t>
-            Request:
-        </t>
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-        <list style="symbols">
-          <t>4 byte flags</t>
-        </list>
-        </t>
-
-        <t>
-            Response (if found):
-        </t>
-        <t>
-        <list style="empty">
-          <t>MUST have extras.</t>
-          <t>MAY have key.</t>
-          <t>MAY have value.</t>
-        </list>
-        </t>
-
-        <t>
-        <list style="symbols">
-          <t>4 byte flags</t>
-        </list>
-        </t>
-
-        <t>
-        <figure>
-          <preamble>Extra data for the get commands:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Flags                                                         |
-    +---------------+---------------+---------------+---------------+
-
-    Total 4 bytes
-          </artwork>
-        </figure>
-        </t>
-
-        <t>
-          The get command gets a single key. The getq command is both mum
-          on cache miss and quiet, holding its response until a non-quiet
-          command is issued. Getk and getkq differs from get and getq by
-          adding the key into the response packet.
-        </t>
-
-        <t>
-          You're not guaranteed a response to a getq/getkq cache hit until
-          you send a non-getq/getkq command later, which uncorks the
-          server and bundles up IOs to send to the client in one go.
-        </t>
-
-        <t>
-          Clients should implement multi-get (still important for
-          reducing network roundtrips!) as n pipelined requests, the
-          first n-1 being getq/getkq, the last being a regular
-          get/getk.  That way you're guaranteed to get a response, and
-          you know when the server's done.  You can also do the naive
-          thing and send n pipelined get/getks, but then you could potentially
-          get back a lot of "NOT_FOUND" error code packets.
-          Alternatively, you can send 'n' getq/getkqs, followed by a
-          'noop' command.
-        </t>
-
-        <section anchor="command-get-example" title="Example">
-          <t>
-           To request the data associated with the key "Hello" the
-           following fields must be specified in the packet.
-          </t>
-          <figure>
-            <preamble>get request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x6f ('o')    |
-    +---------------+
-
-    Total 29 bytes (24 byte header, and 5 bytes key)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x00
-Key length   (2,3)  : 0x0005
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000005
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key          (24-29): The textual string: "Hello"
-Value               : None
-            </artwork>
-          </figure>
-          <t>If the item exist on the server the following packet is returned,
-          otherwise a packet with status code != 0 will be returned (see
-           <xref target="command-introduction">Introduction</xref>)
-          </t>
-          <figure>
-            <preamble>get/getq response:</preamble>
-            <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x04          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x09          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x01          |
-    +---------------+---------------+---------------+---------------+
-  24| 0xde          | 0xad          | 0xbe          | 0xef          |
-    +---------------+---------------+---------------+---------------+
-  28| 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  32| 0x64 ('d')    |
-    +---------------+
-
-    Total 33 bytes (24 byte header, 4 byte extras and 5 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x00
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x04
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000009
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000001
-Extras              :
-  Flags      (24-27): 0xdeadbeef
-Key                 : None
-Value        (28-32): The textual string "World"
-            </artwork>
-          </figure>
-          <figure>
-            <preamble>getk/getkq response:</preamble>
-            <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x04          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x09          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x01          |
-    +---------------+---------------+---------------+---------------+
-  24| 0xde          | 0xad          | 0xbe          | 0xef          |
-    +---------------+---------------+---------------+---------------+
-  28| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  32| 0x6f ('o')    | 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    |
-    +---------------+---------------+---------------+---------------+
-  36| 0x6c ('l')    | 0x64 ('d')    |
-    +---------------+---------------+
-
-    Total 38 bytes (24 byte header, 4 byte extras, 5 byte key
-                    and 5 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x00
-Key length   (2,3)  : 0x0005
-Extra length (4)    : 0x04
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000009
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000001
-Extras              :
-  Flags      (24-27): 0xdeadbeef
-Key          (28-32): The textual string: "Hello"
-Value        (33-37): The textual string: "World"
-            </artwork>
-          </figure>
-        </section>
-      </section>
-
-      <section anchor="command-set" title="Set, Add, Replace">
-        <t>
-        <list style="empty">
-          <t>MUST have extras.</t>
-          <t>MUST have key.</t>
-          <t>MUST have value.</t>
-        </list>
-        </t>
-
-        <t>
-          <list style="symbols">
-            <t>4 byte flags</t>
-            <t>4 byte expiration time</t>
-          </list>
-        </t>
-
-        <figure>
-          <preamble>Extra data for set/add/replace:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Flags                                                         |
-    +---------------+---------------+---------------+---------------+
-   4| Expiration                                                    |
-    +---------------+---------------+---------------+---------------+
-    Total 8 bytes
-          </artwork>
-        </figure>
-
-        <t>
-        If the Data Version Check (CAS) is nonzero, the requested
-        operation MUST only succeed if the item exists and has a CAS value
-        identical to the provided value.
-        </t>
-
-        <t>
-        Add MUST fail if the item already exist.
-        </t>
-
-        <t>
-        Replace MUST fail if the item doesn't exist.
-        </t>
-
-        <t>
-        Set should store the data unconditionally if the item exists
-        or not.
-        </t>
-
-        <t>
-          Quiet mutations only return responses on failure.  Success
-          is considered the general case and is suppressed when in
-          quiet mode, but errors should not be allowed to go
-          unnoticed.
-        </t>
-
-        <section anchor="command-set-example" title="Example">
-            <t>The following figure shows an add-command for
-                <list style="empty">
-                  <t>Key: "Hello"</t>
-                  <t>Value: "World"</t>
-                  <t>Flags: 0xdeadbeef</t>
-                  <t>Expiry: in two hours</t>
-                </list>
-            </t>
-           <figure>
-             <preamble>Add request:</preamble>
-             <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x02          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x08          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x12          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0xde          | 0xad          | 0xbe          | 0xef          |
-    +---------------+---------------+---------------+---------------+
-  28| 0x00          | 0x00          | 0x0e          | 0x10          |
-    +---------------+---------------+---------------+---------------+
-  32| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  36| 0x6f ('o')    | 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    |
-    +---------------+---------------+---------------+---------------+
-  40| 0x6c ('l')    | 0x64 ('d')    |
-    +---------------+---------------+
-
-    Total 42 bytes (24 byte header, 8 byte extras, 5 byte key and
-                    5 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x02
-Key length   (2,3)  : 0x0005
-Extra length (4)    : 0x08
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000012
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              :
-  Flags      (24-27): 0xdeadbeef
-  Expiry     (28-31): 0x00000e10
-Key          (32-36): The textual string "Hello"
-Value        (37-41): The textual string "World"
-             </artwork>
-           </figure>
-           <t>
-        The response-packet contains no extra data, and the result of the
-        operation is signaled through the status code. If the command
-        succeeds, the CAS value for the item is returned in the CAS-field
-        of the packet.
-           </t>
-           <figure>
-             <preamble>Successful add response:</preamble>
-             <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x02          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x01          |
-    +---------------+---------------+---------------+---------------+
-
-    Total 24 bytes
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x02
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000000
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000001
-Extras              : None
-Key                 : None
-Value               : None
-             </artwork>
-           </figure>
-         </section>
-      </section>
-
-      <section anchor="command-delete" title="Delete">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-	  Delete the item with the specific key.
-        </t>
-
-        <section anchor="command-delete-example" title="Example">
-          <t>The following figure shows a delete message for the
-            item "Hello".</t>
-          <figure>
-            <preamble>Delete request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x04          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x6f ('o')    |
-    +---------------+
-
-    Total 29 bytes (24 byte header, 5 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x04
-Key length   (2,3)  : 0x0005
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000005
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : The textual string "Hello"
-Value               : None
-            </artwork>
-          </figure>
-          <t>
-            The response-packet contains no extra data, and the result of the
-            operation is signaled through the status code.
-          </t>
-        </section>
-      </section>
-
-      <section anchor="command-incr" title="Increment, Decrement">
-        <t>
-          <list style="empty">
-            <t>MUST have extras.</t>
-            <t>MUST have key.</t>
-            <t>MUST NOT have value.</t>
-          </list>
-        </t>
-
-        <t>
-          <list style="symbols">
-            <t>8 byte value to add / subtract</t>
-            <t>8 byte initial value (unsigned)</t>
-            <t>4 byte expiration time</t>
-          </list>
-        </t>
-        <figure>
-          <preamble>Extra data for incr/decr:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Amount to add                                                 |
-    |                                                               |
-    +---------------+---------------+---------------+---------------+
-   8| Initial value                                                 |
-    |                                                               |
-    +---------------+---------------+---------------+---------------+
-  16| Expiration                                                    |
-    +---------------+---------------+---------------+---------------+
-    Total 20 bytes
-          </artwork>
-        </figure>
-
-        <t>
-          These commands will either add or remove the specified
-          amount to the requested counter.
-        </t>
-        <t>
-          If the counter does not exist, one of two things may happen:
-        </t>
-        <t>
-          <list style="numbers">
-          <t>If the expiration value is all one-bits (0xffffffff), the
-             operation will fail with NOT_FOUND.</t>
-          <t>For all other expiration values, the operation will succeed
-             by seeding the value for this key with the provided initial
-             value to expire with the provided expiration time. The flags
-             will be set to zero.</t>
-          </list>
-        </t>
-        <figure>
-          <preamble>incr/decr response body:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 64-bit unsigned response.                                     |
-    |                                                               |
-    +---------------+---------------+---------------+---------------+
-    Total 8 bytes
-          </artwork>
-        </figure>
-        <section anchor="command-incr-example" title="Example">
-            <t>The following figure shows an incr-command for
-                <list style="empty">
-                  <t>Key: "counter"</t>
-                  <t>Delta: 0x01</t>
-                  <t>Initial: 0x00</t>
-                  <t>Expiry: in two hours</t>
-                </list>
-            </t>
-            <figure>
-              <preamble>Increment request:</preamble>
-              <artwork>
-
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x05          | 0x00          | 0x07          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x14          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x1b          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  28| 0x00          | 0x00          | 0x00          | 0x01          |
-    +---------------+---------------+---------------+---------------+
-  32| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  36| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  40| 0x00          | 0x00          | 0x0e          | 0x10          |
-    +---------------+---------------+---------------+---------------+
-  44| 0x63 ('c')    | 0x6f ('o')    | 0x75 ('u')    | 0x6e ('n')    |
-    +---------------+---------------+---------------+---------------+
-  48| 0x74 ('t')    | 0x65 ('e')    | 0x72 ('r')    |
-    +---------------+---------------+---------------+
-    Total 51 bytes (24 byte header, 20 byte extras, 7 byte key)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x05
-Key length   (2,3)  : 0x0007
-Extra length (4)    : 0x14
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x0000001b
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              :
-  delta      (24-31): 0x0000000000000001
-  initial    (32-39): 0x0000000000000000
-  exipration (40-43): 0x00000e10
-Key                 : Textual string "counter"
-Value               : None
-              </artwork>
-            </figure>
-            <t>
-             If the key doesn't exist, the server will respond with the
-             initial value. If not the incremented value will be returned.
-             Let's assume that the key didn't exist, so the initial value
-             is returned.
-            </t>
-            <figure>
-              <preamble>Increment response:</preamble>
-              <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x05          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x08          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  28| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-    Total 32 bytes (24 byte header, 8 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x05
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000008
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000005
-Extras              : None
-Key                 : None
-Value               : 0x0000000000000000
-              </artwork>
-            </figure>
-          </section>
-      </section>
-
-      <section anchor="command-quit" title="quit">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST NOT have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-        Close the connection to the server.
-        </t>
-
-        <section anchor="command-quit-example" title="Example">
-          <figure>
-            <preamble>Quit request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x07          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x07
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000000
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : None
-Value               : None
-            </artwork>
-          </figure>
-          <t>
-            The response-packet contains no extra data, and the result of the
-            operation is signaled through the status code. The server will
-            then close the connection.
-          </t>
-        </section>
-      </section>
-
-      <section anchor="command-flush" title="Flush">
-        <t>
-          <list style="empty">
-            <t>MAY have extras.</t>
-            <t>MUST NOT have key.</t>
-            <t>MUST NOT have value.</t>
-          </list>
-        </t>
-
-        <t>
-          <list style="symbols">
-            <t>4 byte expiration time</t>
-          </list>
-        </t>
-        <figure>
-          <preamble>Extra data for flush:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| Expiration                                                    |
-    +---------------+---------------+---------------+---------------+
-  Total 4 bytes
-          </artwork>
-        </figure>
-        <t>
-            Flush the items in the cache now or some time in the future as
-            specified by the expiration field. See the documentation of the
-            textual protocol for the full description on how to specify the
-            expiration time.
-        </t>
-        <section anchor="command-flush-example" title="Example">
-        <t>
-            To flush the cache (delete all items) in two hours, the set
-            the following values in the request
-        </t>
-        <figure>
-          <preamble>Flush request:</preamble>
-          <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x08          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x04          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x04          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x00          | 0x00          | 0x0e          | 0x10          |
-    +---------------+---------------+---------------+---------------+
-    Total 28 bytes (24 byte header, 4 byte body)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x08
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x04
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000004
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              :
-   Expiry    (24-27): 0x000e10
-Key                 : None
-Value               : None
-          </artwork>
-        </figure>
-          <t>
-            The response-packet contains no extra data, and the result of the
-            operation is signaled through the status code.
-          </t>
-        </section>
-      </section>
-      <section anchor="command-noop" title="noop">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST NOT have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-        Used as a keep alive. Flushes outstanding getq/getkq's.
-        </t>
-        <section anchor="command-noop-example" title="Example">
-          <figure>
-            <preamble>Noop request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x0a          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x0a
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000000
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : None
-Value               : None
-            </artwork>
-          </figure>
-          <t>
-            The response-packet contains no extra data, and the result of the
-            operation is signaled through the status code.
-          </t>
-        </section>
-      </section>
-
-      <section anchor="command-version" title="version">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST NOT have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-          Request the server version.
-        </t>
-        <t>
-	  The server responds with a packet containing the version string
-	  in the body with the following format: "x.y.z"
-        </t>
-        <section anchor="command-version-example" title="Example">
-          <figure>
-            <preamble>Version request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x0b          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x0b
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000000
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-            </artwork>
-          </figure>
-          <figure>
-            <preamble>Version response:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x0b          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x31 ('1')    | 0x2e ('.')    | 0x33 ('3')    | 0x2e ('.')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x31 ('1')    |
-    +---------------+
-    Total 29 bytes (24 byte header, 5 byte body)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x0b
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000005
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : None
-Value               : Textual string "1.3.1"
-            </artwork>
-          </figure>
-        </section>
-      </section>
-
-      <section anchor="command-append" title="Append, Prepend">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MUST have key.</t>
-          <t>MUST have value.</t>
-        </list>
-        </t>
-
-        <t>
-          These commands will either append or prepend the specified
-          value to the requested key.
-        </t>
-
-        <section anchor="command-append-example" title="Example">
-          <t>The following example appends '!' to the 'Hello' key.</t>
-          <figure>
-            <preamble>Append request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x0e          | 0x00          | 0x05          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x06          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x6f ('o')    | 0x21 ('!')    |
-    +---------------+---------------+
-    Total 30 bytes (24 byte header, 5 byte key, 1 byte value)
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x0e
-Key length   (2,3)  : 0x0005
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000006
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key          (24-28): The textual string "Hello"
-Value        (29)   : "!"
-            </artwork>
-          </figure>
-          <t>
-            The response-packet contains no extra data, and the result of the
-            operation is signaled through the status code.
-          </t>
-        </section>
-      </section>
-
-      <section anchor="command-stat" title="Stat">
-        <t>
-        <list style="empty">
-          <t>MUST NOT have extras.</t>
-          <t>MAY have key.</t>
-          <t>MUST NOT have value.</t>
-        </list>
-        </t>
-
-        <t>
-	  Request server statistics. Without a key specified the server will
-          respond with a "default" set of statistics information. Each piece
-          of statistical information is returned in its own packet (key
-          contains the name of the statistical item and the body contains the
-          value in ASCII format). The sequence of return packets is terminated
-          with a packet that contains no key and no value.
-        </t>
-        <section anchor="command-stat-example" title="Example">
-            <t>The following example requests all statistics from the server</t>
-          <figure>
-            <preamble>Stat request:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x80          | 0x10          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-    Total 24 bytes
-
-Field        (offset) (value)
-Magic        (0)    : 0x80
-Opcode       (1)    : 0x10
-Key length   (2,3)  : 0x0000
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Reserved     (6,7)  : 0x0000
-Total body   (8-11) : 0x00000000
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Extras              : None
-Key                 : None
-Value               : None
-            </artwork>
-          </figure>
-          <t>
-              The server will send each value in a separate packet with
-              an "empty" packet (no key / no value) to terminate the sequence.
-              Each of the response packets look like the following example:
-         </t>
-          <figure>
-            <preamble>Stat response:</preamble>
-            <artwork>
-  Byte/     0       |       1       |       2       |       3       |
-     /              |               |               |               |
-    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
-    +---------------+---------------+---------------+---------------+
-   0| 0x81          | 0x10          | 0x00          | 0x03          |
-    +---------------+---------------+---------------+---------------+
-   4| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-   8| 0x00          | 0x00          | 0x00          | 0x07          |
-    +---------------+---------------+---------------+---------------+
-  12| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  16| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  20| 0x00          | 0x00          | 0x00          | 0x00          |
-    +---------------+---------------+---------------+---------------+
-  24| 0x70 ('p')    | 0x69 ('i')    | 0x64 ('d')    | 0x33 ('3')    |
-    +---------------+---------------+---------------+---------------+
-  28| 0x30 ('0')    | 0x37 ('7')    | 0x38 ('8')    |
-    +---------------+---------------+---------------+
-    Total 31 bytes (24 byte header, 3 byte key, 4 byte body)
-
-Field        (offset) (value)
-Magic        (0)    : 0x81
-Opcode       (1)    : 0x10
-Key length   (2,3)  : 0x0003
-Extra length (4)    : 0x00
-Data type    (5)    : 0x00
-Status       (6,7)  : 0x0000
-Total body   (8-11) : 0x00000007
-Opaque       (12-15): 0x00000000
-CAS          (16-23): 0x0000000000000000
-Exstras             : None
-Key                 : The textual string "pid"
-Value               : The textual string "3078"
-            </artwork>
-          </figure>
-        </section>
-      </section>
-    </section>
-    <section anchor="security" title="Security Considerations">
-      <t>
-      Memcache has no authentication or security layers whatsoever. It is
-      RECOMMENDED that memcache be deployed strictly on closed, protected,
-      back-end networks within a single data center, within a single cluster of
-      servers, or even on a single host, providing shared caching for multiple
-      applications. Memcache MUST NOT be made available on a public network.
-      </t>
-    </section>
-
-  </middle>
-
-  <back>
-    <references title="Normative References">
-      <reference anchor="LJ">
-        <front>
-          <title>LJ NEEDS MOAR SPEED</title>
-          <author fullname="Brad Fitzpatrick">
-            <organization>Danga Interactive</organization>
-          </author>
-          <date day="5" month="10" year="1999" />
-          <abstract>
-            <t>http://www.livejournal.com/</t>
-          </abstract>
-        </front>
-      </reference>
-      <dwdrfc-ref anchor="KEYWORDS" src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/>
-    </references>
-
-    <section anchor="acknowledgments" title="Acknowledgments">
-      <t>
-      Thanks to Brad Fitzpatrick, Anatoly Vorobey, Steven Grimm, and Dustin
-      Sallings, for their work on the memcached server.
-      </t>
-
-      <t>
-      Thanks to Sean Chittenden, Jonathan Steinert, Brian Aker, Evan Martin,
-      Nathan Neulinger, Eric Hodel, Michael Johnson, Paul Querna, Jamie
-      McCarthy, Philip Neustrom, Andrew O'Brien, Josh Rotenberg, Robin H.
-      Johnson, Tim Yardley, Paolo Borelli, Eli Bingham, Jean-Francois
-      Bustarret, Paul G, Paul Lindner, Alan Kasindorf, Chris Goffinet, Tomash
-      Brechko, and others for their work reporting bugs and maintaining
-      memcached client libraries and bindings in many languages.
-      </t>
-    </section>
-  </back>
-
-</rfc>
-
diff --git a/third_party/memcached/doc/protocol.txt b/third_party/memcached/doc/protocol.txt
deleted file mode 100644
index 951728012a4f9f86265c22796fce4a74135eb2ef..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/protocol.txt
+++ /dev/null
@@ -1,662 +0,0 @@
-Protocol
---------
-
-Clients of memcached communicate with server through TCP connections.
-(A UDP interface is also available; details are below under "UDP
-protocol.") A given running memcached server listens on some
-(configurable) port; clients connect to that port, send commands to
-the server, read responses, and eventually close the connection.
-
-There is no need to send any command to end the session. A client may
-just close the connection at any moment it no longer needs it. Note,
-however, that clients are encouraged to cache their connections rather
-than reopen them every time they need to store or retrieve data.  This
-is because memcached is especially designed to work very efficiently
-with a very large number (many hundreds, more than a thousand if
-necessary) of open connections. Caching connections will eliminate the
-overhead associated with establishing a TCP connection (the overhead
-of preparing for a new connection on the server side is insignificant
-compared to this).
-
-There are two kinds of data sent in the memcache protocol: text lines
-and unstructured data.  Text lines are used for commands from clients
-and responses from servers. Unstructured data is sent when a client
-wants to store or retrieve data. The server will transmit back
-unstructured data in exactly the same way it received it, as a byte
-stream. The server doesn't care about byte order issues in
-unstructured data and isn't aware of them. There are no limitations on
-characters that may appear in unstructured data; however, the reader
-of such data (either a client or a server) will always know, from a
-preceding text line, the exact length of the data block being
-transmitted.
-
-Text lines are always terminated by \r\n. Unstructured data is _also_
-terminated by \r\n, even though \r, \n or any other 8-bit characters
-may also appear inside the data. Therefore, when a client retrieves
-data from a server, it must use the length of the data block (which it
-will be provided with) to determine where the data block ends, and not
-the fact that \r\n follows the end of the data block, even though it
-does.
-
-Keys
-----
-
-Data stored by memcached is identified with the help of a key. A key
-is a text string which should uniquely identify the data for clients
-that are interested in storing and retrieving it.  Currently the
-length limit of a key is set at 250 characters (of course, normally
-clients wouldn't need to use such long keys); the key must not include
-control characters or whitespace.
-
-Commands
---------
-
-There are three types of commands.
-
-Storage commands (there are six: "set", "add", "replace", "append"
-"prepend" and "cas") ask the server to store some data identified by a
-key. The client sends a command line, and then a data block; after
-that the client expects one line of response, which will indicate
-success or faulure.
-
-Retrieval commands (there are two: "get" and "gets") ask the server to
-retrieve data corresponding to a set of keys (one or more keys in one
-request). The client sends a command line, which includes all the
-requested keys; after that for each item the server finds it sends to
-the client one response line with information about the item, and one
-data block with the item's data; this continues until the server
-finished with the "END" response line.
-
-All other commands don't involve unstructured data. In all of them,
-the client sends one command line, and expects (depending on the
-command) either one line of response, or several lines of response
-ending with "END" on the last line.
-
-A command line always starts with the name of the command, followed by
-parameters (if any) delimited by whitespace. Command names are
-lower-case and are case-sensitive.
-
-Expiration times
-----------------
-
-Some commands involve a client sending some kind of expiration time
-(relative to an item or to an operation requested by the client) to
-the server. In all such cases, the actual value sent may either be
-Unix time (number of seconds since January 1, 1970, as a 32-bit
-value), or a number of seconds starting from current time. In the
-latter case, this number of seconds may not exceed 60*60*24*30 (number
-of seconds in 30 days); if the number sent by a client is larger than
-that, the server will consider it to be real Unix time value rather
-than an offset from current time.
-
-
-Error strings
--------------
-
-Each command sent by a client may be answered with an error string
-from the server. These error strings come in three types:
-
-- "ERROR\r\n"
-
-  means the client sent a nonexistent command name.
-
-- "CLIENT_ERROR <error>\r\n"
-
-  means some sort of client error in the input line, i.e. the input
-  doesn't conform to the protocol in some way. <error> is a
-  human-readable error string.
-
-- "SERVER_ERROR <error>\r\n"
-
-  means some sort of server error prevents the server from carrying
-  out the command. <error> is a human-readable error string. In cases
-  of severe server errors, which make it impossible to continue
-  serving the client (this shouldn't normally happen), the server will
-  close the connection after sending the error line. This is the only
-  case in which the server closes a connection to a client.
-
-
-In the descriptions of individual commands below, these error lines
-are not again specifically mentioned, but clients must allow for their
-possibility.
-
-
-Storage commands
-----------------
-
-First, the client sends a command line which looks like this:
-
-<command name> <key> <flags> <exptime> <bytes> [noreply]\r\n
-cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n
-
-- <command name> is "set", "add", "replace", "append" or "prepend"
-
-  "set" means "store this data".
-
-  "add" means "store this data, but only if the server *doesn't* already
-  hold data for this key".
-
-  "replace" means "store this data, but only if the server *does*
-  already hold data for this key".
-
-  "append" means "add this data to an existing key after existing data".
-
-  "prepend" means "add this data to an existing key before existing data".
-
-  The append and prepend commands do not accept flags or exptime.
-  They update existing data portions, and ignore new flag and exptime
-  settings.
-
-  "cas" is a check and set operation which means "store this data but
-  only if no one else has updated since I last fetched it."
-
-- <key> is the key under which the client asks to store the data
-
-- <flags> is an arbitrary 16-bit unsigned integer (written out in
-  decimal) that the server stores along with the data and sends back
-  when the item is retrieved. Clients may use this as a bit field to
-  store data-specific information; this field is opaque to the server.
-  Note that in memcached 1.2.1 and higher, flags may be 32-bits, instead
-  of 16, but you might want to restrict yourself to 16 bits for
-  compatibility with older versions.
-
-- <exptime> is expiration time. If it's 0, the item never expires
-  (although it may be deleted from the cache to make place for other
-  items). If it's non-zero (either Unix time or offset in seconds from
-  current time), it is guaranteed that clients will not be able to
-  retrieve this item after the expiration time arrives (measured by
-  server time).
-
-- <bytes> is the number of bytes in the data block to follow, *not*
-  including the delimiting \r\n. <bytes> may be zero (in which case
-  it's followed by an empty data block).
-
-- <cas unique> is a unique 64-bit value of an existing entry.
-  Clients should use the value returned from the "gets" command
-  when issuing "cas" updates.
-
-- "noreply" optional parameter instructs the server to not send the
-  reply.  NOTE: if the request line is malformed, the server can't
-  parse "noreply" option reliably.  In this case it may send the error
-  to the client, and not reading it on the client side will break
-  things.  Client should construct only valid requests.
-
-After this line, the client sends the data block:
-
-<data block>\r\n
-
-- <data block> is a chunk of arbitrary 8-bit data of length <bytes>
-  from the previous line.
-
-After sending the command line and the data blockm the client awaits
-the reply, which may be:
-
-- "STORED\r\n", to indicate success.
-
-- "NOT_STORED\r\n" to indicate the data was not stored, but not
-because of an error. This normally means that the
-condition for an "add" or a "replace" command wasn't met.
-
-- "EXISTS\r\n" to indicate that the item you are trying to store with
-a "cas" command has been modified since you last fetched it.
-
-- "NOT_FOUND\r\n" to indicate that the item you are trying to store
-with a "cas" command did not exist.
-
-
-Retrieval command:
-------------------
-
-The retrieval commands "get" and "gets" operates like this:
-
-get <key>*\r\n
-gets <key>*\r\n
-
-- <key>* means one or more key strings separated by whitespace.
-
-After this command, the client expects zero or more items, each of
-which is received as a text line followed by a data block. After all
-the items have been transmitted, the server sends the string
-
-"END\r\n"
-
-to indicate the end of response.
-
-Each item sent by the server looks like this:
-
-VALUE <key> <flags> <bytes> [<cas unique>]\r\n
-<data block>\r\n
-
-- <key> is the key for the item being sent
-
-- <flags> is the flags value set by the storage command
-
-- <bytes> is the length of the data block to follow, *not* including
-  its delimiting \r\n
-
-- <cas unique> is a unique 64-bit integer that uniquely identifies
-  this specific item.
-
-- <data block> is the data for this item.
-
-If some of the keys appearing in a retrieval request are not sent back
-by the server in the item list this means that the server does not
-hold items with such keys (because they were never stored, or stored
-but deleted to make space for more items, or expired, or explicitly
-deleted by a client).
-
-
-Deletion
---------
-
-The command "delete" allows for explicit deletion of items:
-
-delete <key> [noreply]\r\n
-
-- <key> is the key of the item the client wishes the server to delete
-
-- "noreply" optional parameter instructs the server to not send the
-  reply.  See the note in Storage commands regarding malformed
-  requests.
-
-The response line to this command can be one of:
-
-- "DELETED\r\n" to indicate success
-
-- "NOT_FOUND\r\n" to indicate that the item with this key was not
-  found.
-
-See the "flush_all" command below for immediate invalidation
-of all existing items.
-
-
-Increment/Decrement
--------------------
-
-Commands "incr" and "decr" are used to change data for some item
-in-place, incrementing or decrementing it. The data for the item is
-treated as decimal representation of a 64-bit unsigned integer.  If
-the current data value does not conform to such a representation, the
-incr/decr commands return an error (memcached <= 1.2.6 treated the
-bogus value as if it were 0, leading to confusing). Also, the item
-must already exist for incr/decr to work; these commands won't pretend
-that a non-existent key exists with value 0; instead, they will fail.
-
-The client sends the command line:
-
-incr <key> <value> [noreply]\r\n
-
-or
-
-decr <key> <value> [noreply]\r\n
-
-- <key> is the key of the item the client wishes to change
-
-- <value> is the amount by which the client wants to increase/decrease
-the item. It is a decimal representation of a 64-bit unsigned integer.
-
-- "noreply" optional parameter instructs the server to not send the
-  reply.  See the note in Storage commands regarding malformed
-  requests.
-
-The response will be one of:
-
-- "NOT_FOUND\r\n" to indicate the item with this value was not found
-
-- <value>\r\n , where <value> is the new value of the item's data,
-  after the increment/decrement operation was carried out.
-
-Note that underflow in the "decr" command is caught: if a client tries
-to decrease the value below 0, the new value will be 0.  Overflow in
-the "incr" command will wrap around the 64 bit mark.
-
-Note also that decrementing a number such that it loses length isn't
-guaranteed to decrement its returned length.  The number MAY be
-space-padded at the end, but this is purely an implementation
-optimization, so you also shouldn't rely on that.
-
-Statistics
-----------
-
-The command "stats" is used to query the server about statistics it
-maintains and other internal data. It has two forms. Without
-arguments:
-
-stats\r\n
-
-it causes the server to output general-purpose statistics and
-settings, documented below.  In the other form it has some arguments:
-
-stats <args>\r\n
-
-Depending on <args>, various internal data is sent by the server. The
-kinds of arguments and the data sent are not documented in this vesion
-of the protocol, and are subject to change for the convenience of
-memcache developers.
-
-
-General-purpose statistics
---------------------------
-
-Upon receiving the "stats" command without arguments, the server sents
-a number of lines which look like this:
-
-STAT <name> <value>\r\n
-
-The server terminates this list with the line
-
-END\r\n
-
-In each line of statistics, <name> is the name of this statistic, and
-<value> is the data.  The following is the list of all names sent in
-response to the "stats" command, together with the type of the value
-sent for this name, and the meaning of the value.
-
-In the type column below, "32u" means a 32-bit unsigned integer, "64u"
-means a 64-bit unsigner integer. '32u.32u' means two 32-but unsigned
-integers separated by a colon (treat this as a floating point number).
-
-|-----------------------+---------+-------------------------------------------|
-| Name                  | Type    | Meaning                                   |
-|-----------------------+---------+-------------------------------------------|
-| pid                   | 32u     | Process id of this server process         |
-| uptime                | 32u     | Number of secs since the server started   |
-| time                  | 32u     | current UNIX time according to the server |
-| version               | string  | Version string of this server             |
-| pointer_size          | 32      | Default size of pointers on the host OS   |
-|                       |         | (generally 32 or 64)                      |
-| rusage_user           | 32u.32u | Accumulated user time for this process    |
-|                       |         | (seconds:microseconds)                    |
-| rusage_system         | 32u.32u | Accumulated system time for this process  |
-|                       |         | (seconds:microseconds)                    |
-| curr_items            | 32u     | Current number of items stored            |
-| total_items           | 32u     | Total number of items stored since        |
-|                       |         | the server started                        |
-| bytes                 | 64u     | Current number of bytes used              |
-|                       |         | to store items                            |
-| curr_connections      | 32u     | Number of open connections                |
-| total_connections     | 32u     | Total number of connections opened since  |
-|                       |         | the server started running                |
-| connection_structures | 32u     | Number of connection structures allocated |
-|                       |         | by the server                             |
-| cmd_get               | 64u     | Cumulative number of retrieval reqs       |
-| cmd_set               | 64u     | Cumulative number of storage reqs         |
-| get_hits              | 64u     | Number of keys that have been requested   |
-|                       |         | and found present                         |
-| get_misses            | 64u     | Number of items that have been requested  |
-|                       |         | and not found                             |
-| delete_misses         | 64u     | Number of deletions reqs for missing keys |
-| delete_hits           | 64u     | Number of deletion reqs resulting in      |
-|                       |         | an item being removed.                    |
-| incr_misses           | 64u     | Number of incr reqs against missing keys. |
-| incr_hits             | 64u     | Number of successful incr reqs.           |
-| decr_misses           | 64u     | Number of decr reqs against missing keys. |
-| decr_hits             | 64u     | Number of successful decr reqs.           |
-| cas_misses            | 64u     | Number of CAS reqs against missing keys.  |
-| cas_hits              | 64u     | Number of successful CAS reqs.            |
-| cas_badval            | 64u     | Number of CAS reqs for which a key was    |
-|                       |         | found, but the CAS value did not match.   |
-| evictions             | 64u     | Number of valid items removed from cache  |
-|                       |         | to free memory for new items              |
-| bytes_read            | 64u     | Total number of bytes read by this server |
-|                       |         | from network                              |
-| bytes_written         | 64u     | Total number of bytes sent by this server |
-|                       |         | to network                                |
-| limit_maxbytes        | 32u     | Number of bytes this server is allowed to |
-|                       |         | use for storage.                          |
-| threads               | 32u     | Number of worker threads requested.       |
-|                       |         | (see doc/threads.txt)                     |
-| conn_yields           | 64u     | Number of times any connection yielded to |
-|                       |         | another due to hitting the -R limit.      |
-|-----------------------+---------+-------------------------------------------|
-
-Settings statistics
--------------------
-CAVEAT: This section describes statistics which are subject to change in the
-future.
-
-The "stats" command with the argument of "settings" returns details of
-the settings of the running memcached.  This is primarily made up of
-the results of processing commandline options.
-
-Note that these are not guaranteed to return in any specific order and
-this list may not be exhaustive.  Otherwise, this returns like any
-other stats command.
-
-|-----------------+----------+----------------------------------------------|
-| Name            | Type     | Meaning                                      |
-|-----------------+----------+----------------------------------------------|
-| maxbytes        | size_t   | Maximum number of bytes allows in this cache |
-| maxconns        | 32       | Maximum number of clients allowed.           |
-| tcpport         | 32       | TCP listen port.                             |
-| udpport         | 32       | UDP listen port.                             |
-| inter           | string   | Listen interface.                            |
-| verbosity       | 32       | 0 = none, 1 = some, 2 = lots                 |
-| oldest          | 32u      | Age of the oldest honored object.            |
-| evictions       | on/off   | When off, LRU evictions are disabled.        |
-| domain_socket   | string   | Path to the domain socket (if any).          |
-| umask           | 32 (oct) | umask for the creation of the domain socket. |
-| growth_factor   | float    | Chunk size growth factor.                    |
-| chunk_size      | 32       | Minimum space allocated for key+value+flags  |
-| num_threads     | 32       | Number of threads (including dispatch).      |
-| stat_key_prefix | char     | Stats prefix separator character.            |
-| detail_enabled  | bool     | If yes, stats detail is enabled.             |
-| reqs_per_event  | 32       | Max num IO ops processed within an event.    |
-| cas_enabled     | bool     | When no, CAS is not enabled for this server. |
-| tcp_backlog     | 32       | TCP listen backlog.
-|-----------------+----------+----------------------------------------------|
-
-
-Item statistics
----------------
-CAVEAT: This section describes statistics which are subject to change in the
-future.
-
-The "stats" command with the argument of "items" returns information about
-item storage per slab class. The data is returned in the format:
-
-STAT items:<slabclass>:<stat> <value>\r\n
-
-The server terminates this list with the line
-
-END\r\n
-
-The slabclass aligns with class ids used by the "stats slabs" command. Where
-"stats slabs" describes size and memory usage, "stats items" shows higher
-level information.
-
-The following item values are defined as of writing.
-
-Name                   Meaning
-------------------------------
-number                 Number of items presently stored in this class. Expired
-                       items are not automatically excluded.
-age                    Age of the oldest item in the LRU.
-evicted                Number of times an item had to be evicted from the LRU
-                       before it expired.
-evicted_nonzero        Number of times an item which had an explicit expire
-                       time set had to be evicted from the LRU before it
-                       expired.
-evicted_time           Seconds since the last access for the most recent item
-                       evicted from this class. Use this to judge how
-                       recently active your evicted data is.
-outofmemory            Number of times the underlying slab class was unable to
-                       store a new item. This means you are running with -M or
-                       an eviction failed.
-tailrepairs            Number of times we self-healed a slab with a refcount
-                       leak. If this counter is increasing a lot, please
-                       report your situation to the developers.
-
-Note this will only display information about slabs which exist, so an empty
-cache will return an empty set.
-
-
-Item size statistics
---------------------
-CAVEAT: This section describes statistics which are subject to change in the
-future.
-
-The "stats" command with the argument of "sizes" returns information about the
-general size and count of all items stored in the cache.
-WARNING: This command WILL lock up your cache! It iterates over *every item*
-and examines the size. While the operation is fast, if you have many items
-you could prevent memcached from serving requests for several seconds.
-
-The data is returned in the following format:
-
-<size> <count>\r\n
-
-The server terminates this list with the line
-
-END\r\n
-
-'size' is an approximate size of the item, within 32 bytes.
-'count' is the amount of items that exist within that 32-byte range.
-
-This is essentially a display of all of your items if there was a slab class
-for every 32 bytes. You can use this to determine if adjusting the slab growth
-factor would save memory overhead. For example: generating more classes in the
-lower range could allow items to fit more snugly into their slab classes, if
-most of your items are less than 200 bytes in size.
-
-
-Slab statistics
----------------
-CAVEAT: This section describes statistics which are subject to change in the
-future.
-
-The "stats" command with the argument of "slabs" returns information about
-each of the slabs created by memcached during runtime. This includes per-slab
-information along with some totals. The data is returned in the format:
-
-STAT <slabclass>:<stat> <value>\r\n
-STAT <stat> <value>\r\n
-
-The server terminates this list with the line
-
-END\r\n
-
-|-----------------+----------------------------------------------------------|
-| Name            | Meaning                                                  |
-|-----------------+----------------------------------------------------------|
-| chunk_size      | The amount of space each chunk uses. One item will use   |
-|                 | one chunk of the appropriate size.                       |
-| chunks_per_page | How many chunks exist within one page. A page by         |
-|                 | default is one megabyte in size. Slabs are allocated per |
-|                 | page, then broken into chunks.                           |
-| total_pages     | Total number of pages allocated to the slab class.       |
-| total_chunks    | Total number of chunks allocated to the slab class.      |
-| get_hits        | Total number of get requests serviced by this class.     |
-| cmd_set         | Total number of set requests storing data in this class. |
-| delete_hits     | Total number of successful deletes from this class.      |
-| incr_hits       | Total number of incrs modifying this class.              |
-| decr_hits       | Total number of decrs modifying this class.              |
-| cas_hits        | Total number of CAS commands modifying this class.       |
-| cas_badval      | Total number of CAS commands that failed to modify a     |
-|                 | value due to a bad CAS id.                               |
-| used_chunks     | How many chunks have been allocated to items.            |
-| free_chunks     | Chunks not yet allocated to items, or freed via delete.  |
-| free_chunks_end | Number of free chunks at the end of the last allocated   |
-|                 | page.                                                    |
-| mem_requested   | Number of bytes requested to be stored in this slab[*].  |
-| active_slabs    | Total number of slab classes allocated.                  |
-| total_malloced  | Total amount of memory allocated to slab pages.          |
-|-----------------+----------------------------------------------------------|
-
-* Items are stored in a slab that is the same size or larger than the
-  item.  mem_requested shows the size of all items within a
-  slab. (total_pages * 1MB) - mem_requested shows memory wasted in a
-  slab class.  If you see a lot of waste, consider tuning the slab
-  factor.
-
-Other commands
---------------
-
-"flush_all" is a command with an optional numeric argument. It always
-succeeds, and the server sends "OK\r\n" in response (unless "noreply"
-is given as the last parameter). Its effect is to invalidate all
-existing items immediately (by default) or after the expiration
-specified.  After invalidation none of the items will be returned in
-response to a retrieval command (unless it's stored again under the
-same key *after* flush_all has invalidated the items). flush_all
-doesn't actually free all the memory taken up by existing items; that
-will happen gradually as new items are stored. The most precise
-definition of what flush_all does is the following: it causes all
-items whose update time is earlier than the time at which flush_all
-was set to be executed to be ignored for retrieval purposes.
-
-The intent of flush_all with a delay, was that in a setting where you
-have a pool of memcached servers, and you need to flush all content,
-you have the option of not resetting all memcached servers at the
-same time (which could e.g. cause a spike in database load with all
-clients suddenly needing to recreate content that would otherwise
-have been found in the memcached daemon).
-
-The delay option allows you to have them reset in e.g. 10 second
-intervals (by passing 0 to the first, 10 to the second, 20 to the
-third, etc. etc.).
-
-
-"version" is a command with no arguments:
-
-version\r\n
-
-In response, the server sends
-
-"VERSION <version>\r\n", where <version> is the version string for the
-server.
-
-"verbosity" is a command with a numeric argument. It always succeeds,
-and the server sends "OK\r\n" in response (unless "noreply" is given
-as the last parameter). Its effect is to set the verbosity level of
-the logging output.
-
-"quit" is a command with no arguments:
-
-quit\r\n
-
-Upon receiving this command, the server closes the
-connection. However, the client may also simply close the connection
-when it no longer needs it, without issuing this command.
-
-
-UDP protocol
-------------
-
-For very large installations where the number of clients is high enough
-that the number of TCP connections causes scaling difficulties, there is
-also a UDP-based interface. The UDP interface does not provide guaranteed
-delivery, so should only be used for operations that aren't required to
-succeed; typically it is used for "get" requests where a missing or
-incomplete response can simply be treated as a cache miss.
-
-Each UDP datagram contains a simple frame header, followed by data in the
-same format as the TCP protocol described above. In the current
-implementation, requests must be contained in a single UDP datagram, but
-responses may span several datagrams. (The only common requests that would
-span multiple datagrams are huge multi-key "get" requests and "set"
-requests, both of which are more suitable to TCP transport for reliability
-reasons anyway.)
-
-The frame header is 8 bytes long, as follows (all values are 16-bit integers
-in network byte order, high byte first):
-
-0-1 Request ID
-2-3 Sequence number
-4-5 Total number of datagrams in this message
-6-7 Reserved for future use; must be 0
-
-The request ID is supplied by the client. Typically it will be a
-monotonically increasing value starting from a random seed, but the client
-is free to use whatever request IDs it likes. The server's response will
-contain the same ID as the incoming request. The client uses the request ID
-to differentiate between responses to outstanding requests if there are
-several pending from the same server; any datagrams with an unknown request
-ID are probably delayed responses to an earlier request and should be
-discarded.
-
-The sequence number ranges from 0 to n-1, where n is the total number of
-datagrams in the message. The client should concatenate the payloads of the
-datagrams for a given response in sequence number order; the resulting byte
-stream will contain a complete response in the same format as the TCP
-protocol (including terminating \r\n sequences).
diff --git a/third_party/memcached/doc/readme.txt b/third_party/memcached/doc/readme.txt
deleted file mode 100644
index 6a9d0c8d1f3f388687d04bb123b348600d1d67fa..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-To build the documentation you need xml2rfc ( http://xml.resource.org/ ).
diff --git a/third_party/memcached/doc/threads.txt b/third_party/memcached/doc/threads.txt
deleted file mode 100644
index 8cd28c5cb50f05441f5db3fb20a1cf24cafcf0d6..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/threads.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-Multithreading support in memcached
-
-OVERVIEW
-
-By default, memcached is compiled as a single-threaded application. This is
-the most CPU-efficient mode of operation, and it is appropriate for memcached
-instances running on single-processor servers or whose request volume is
-low enough that available CPU power is not a bottleneck.
-
-More heavily-used memcached instances can benefit from multithreaded mode.
-To enable it, use the "--enable-threads" option to the configure script:
-
-./configure --enable-threads
-
-You must have the POSIX thread functions (pthread_*) on your system in order
-to use memcached's multithreaded mode.
-
-Once you have a thread-capable memcached executable, you can control the
-number of threads using the "-t" option; the default is 4. On a machine
-that's dedicated to memcached, you will typically want one thread per
-processor core. Due to memcached's nonblocking architecture, there is no
-real advantage to using more threads than the number of CPUs on the machine;
-doing so will increase lock contention and is likely to degrade performance.
-
-
-INTERNALS
-
-The threading support is mostly implemented as a series of wrapper functions
-that protect calls to underlying code with one of a small number of locks.
-In single-threaded mode, the wrappers are replaced with direct invocations
-of the target code using #define; that is done in memcached.h. This approach
-allows memcached to be compiled in either single- or multi-threaded mode.
-
-Each thread has its own instance of libevent ("base" in libevent terminology).
-The only direct interaction between threads is for new connections. One of
-the threads handles the TCP listen socket; each new connection is passed to
-a different thread on a round-robin basis. After that, each thread operates
-on its set of connections as if it were running in single-threaded mode,
-using libevent to manage nonblocking I/O as usual.
-
-UDP requests are a bit different, since there is only one UDP socket that's
-shared by all clients. The UDP socket is monitored by all of the threads.
-When a datagram comes in, all the threads that aren't already processing
-another request will receive "socket readable" callbacks from libevent.
-Only one thread will successfully read the request; the others will go back
-to sleep or, in the case of a very busy server, will read whatever other
-UDP requests are waiting in the socket buffer. Note that in the case of
-moderately busy servers, this results in increased CPU consumption since
-threads will constantly wake up and find no input waiting for them. But
-short of much more major surgery on the I/O code, this is not easy to avoid.
-
-
-TO DO
-
-The locking is currently very coarse-grained.  There is, for example, one
-lock that protects all the calls to the hashtable-related functions. Since
-memcached spends much of its CPU time on command parsing and response
-assembly, rather than managing the hashtable per se, this is not a huge
-bottleneck for small numbers of processors. However, the locking will likely
-have to be refined in the event that memcached needs to run well on
-massively-parallel machines.
-
-One cheap optimization to reduce contention on that lock: move the hash value
-computation so it occurs before the lock is obtained whenever possible.
-Right now the hash is performed at the lowest levels of the functions in
-assoc.c. If instead it was computed in memcached.c, then passed along with
-the key and length into the items.c code and down into assoc.c, that would
-reduce the amount of time each thread needs to keep the hashtable lock held.
diff --git a/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml b/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml
deleted file mode 100644
index 4452c347807e26e9e30f38234170b16400eb9cdd..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<reference anchor='RFC0768'>
-
-<front>
-<title>User Datagram Protocol</title>
-<author initials='J.' surname='Postel' fullname='J. Postel'>
-<organization>University of Southern California (USC)/Information Sciences Institute</organization>
-<address>
-<postal>
-<street>4676 Admiralty Way</street>
-<city>Marina del Rey</city>
-<region>CA</region>
-<code>90291</code>
-<country>US</country></postal>
-<phone>+1 213 822 1511</phone></address></author>
-<date year='1980' day='28' month='August' /></front>
-
-<seriesInfo name='STD' value='6' />
-<seriesInfo name='RFC' value='768' />
-<format type='TXT' octets='5896' target='ftp://ftp.isi.edu/in-notes/rfc768.txt' />
-</reference>
diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl b/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl
deleted file mode 100644
index 99b73a84b51f116283f64ffc13e82ca9710e736a..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-  <xsl:output method="xml"/>
-
-  <xsl:template name='noinc'>
-    <xsl:apply-templates mode='noinc'/>
-  </xsl:template>
-
-  <xsl:template match="*" mode='noinc'>
-    <xsl:copy>
-      <xsl:apply-templates select='@*' mode='noinc'/>
-      <xsl:apply-templates mode='noinc'/>
-    </xsl:copy>
-  </xsl:template>
-  <xsl:template match='@*' mode='noinc'>
-    <xsl:attribute name='{name()}'>
-      <xsl:value-of select='.'/>
-    </xsl:attribute>
-  </xsl:template>
-
-  <xsl:template match='processing-instruction("rfc")' mode='noinc'>
-    <xsl:choose>
-      <xsl:when test='substring-before(.,"=") = "include"'>
-        <xsl:call-template name='include-pi'>
-          <xsl:with-param name='include-href'>
-            <xsl:value-of select="translate( substring-after( ., '=' ), '&quot; ', '' )"/><xsl:text>.xml</xsl:text>
-          </xsl:with-param>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:copy-of select='.'/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template name='include-pi'>
-    <xsl:param name='include-href'/>
-    <xsl:apply-templates select="document( $include-href )" mode='noinc'/>
-  </xsl:template>
-
-  <xsl:template match='dwdrfc-ref' mode='noinc'>
-	<xsl:param name='include-href'>
-          <xsl:choose>
-            <xsl:when test='starts-with( @src, "http://" )'>
-              <xsl:value-of select='@src'/>
-            </xsl:when>
-            <xsl:otherwise>
-              <xsl:text>http://xml.resource.org/public/rfc/</xsl:text>
-              <xsl:value-of select='@src'/>
-              <xsl:text>.xml</xsl:text>
-            </xsl:otherwise>
-          </xsl:choose>
-	</xsl:param>
-        <reference anchor="{@anchor}">
-          <xsl:apply-templates select="document( $include-href )" mode="refrename"/>
-	</reference>
-  </xsl:template>
-
-	<xsl:template match='*' mode='refrename'>
-	<xsl:apply-templates mode='refrename'/>
-	</xsl:template>
-
-	<xsl:template match='reference' mode='refrename'>
-	<xsl:apply-templates mode='noinc'/>
-	</xsl:template>
-
-  <xsl:template match='/'>
-    <xsl:call-template name='noinc'/>
-  </xsl:template>
-
-  <xsl:template name='output'>
-    <xsl:param name='foo'/>
-    <xsl:copy-of select='$foo'/>
-    <xsl:apply-templates select='$foo'/>
-  </xsl:template>
-
-  <xsl:template match='*' mode='output'>
-    <element>
-      <xsl:value-of select='name()'/>
-      <xsl:apply-templates mode='output'/>
-    </element>
-  </xsl:template>
-  <xsl:template match='text()' mode='output'/>
-
-  <!-- Reference checking attributes stripped here. -->
-  <xsl:template match='references' mode='noinc'>
-    <xsl:element name='references'>
-      <xsl:attribute name='title'>
-        <xsl:value-of select='@title'/>
-      </xsl:attribute>
-      <xsl:apply-templates mode='noinc'/>
-    </xsl:element>
-  </xsl:template>
-
-  <xsl:template match='xref' mode='noinc'>
-    <xsl:element name='xref'>
-      <xsl:attribute name='target'>
-        <xsl:value-of select='@target'/>
-      </xsl:attribute>
-      <xsl:apply-templates mode='noinc'/>
-    </xsl:element>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-other.ent b/third_party/memcached/doc/xml2rfc/rfc2629-other.ent
deleted file mode 100644
index 0da80b728d9bcbc1a79558ad8abbab37b111ca4f..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/rfc2629-other.ent
+++ /dev/null
@@ -1,61 +0,0 @@
-<!-- rfc2629-other.ent
-
-     Character entity set for RFC-2629 source xml documents.
-     There is no need to invoke this directly from
-     the source document itself; just invoke the DTD.
-
-     These are unknown to (X)HTML, so any converter to these
-     formats must either substitute these entities
-     or invoke this file from the output file.
-
-     Conversion to txt or nroff format will replace
-     these entities by the parenthesized text.
-
-     Typical invocation:
-       <!ENTITY % rfc2629-other
-                PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN"
-                       "http://xml.resource.org/authoring/rfc2629-other.ent">
-       %rfc2629-other;
--->
-
-<!-- Magical -->
-<!--     rfc.number            (automatically expanded to content
-                                of number="..." attribute
-                                of <rfc> element, or to "XXXX")                       -->
-
-<!-- ASCII -->
-<!ENTITY excl     "&#33;"><!-- U+0021 EXCLAMATION MARK                  ("!")         -->
-<!ENTITY num      "&#35;"><!-- U+0023 NUMBER SIGN                       ("#")         -->
-<!ENTITY dollar   "&#36;"><!-- U+0024 DOLLAR SIGN                       ("$")         -->
-<!ENTITY percnt   "&#37;"><!-- U+0025 PERCENT SIGN                      ("%")         -->
-<!ENTITY lpar     "&#40;"><!-- U+0028 LEFT PARENTHESIS                  ("(")         -->
-<!ENTITY rpar     "&#41;"><!-- U+0029 RIGHT PARENTHESIS                 (")")         -->
-<!ENTITY ast      "&#42;"><!-- U+002A ASTERISK                          ("*")         -->
-<!ENTITY plus     "&#43;"><!-- U+002B PLUS SIGN                         ("+")         -->
-<!ENTITY comma    "&#44;"><!-- U+002C COMMA                             (",")         -->
-<!ENTITY hyphen   "&#45;"><!-- U+002D HYPHEN-MINUS                      ("-")         -->
-<!ENTITY period   "&#46;"><!-- U+002E FULL STOP                         (".")         -->
-<!ENTITY sol      "&#47;"><!-- U+002F SOLIDUS                           ("/")         -->
-<!ENTITY colon    "&#58;"><!-- U+003A COLON                             (":")         -->
-<!ENTITY semi     "&#59;"><!-- U+003B SEMICOLON                         (";")         -->
-<!ENTITY equals   "&#61;"><!-- U+003D EQUALS SIGN                       ("=")         -->
-<!ENTITY quest    "&#63;"><!-- U+003F QUESTION MARK                     ("?")         -->
-<!ENTITY commat   "&#64;"><!-- U+0040 COMMERCIAL AT                     ("@")         -->
-<!ENTITY lsqb     "&#91;"><!-- U+005B LEFT SQUARE BRACKET               ("[")         -->
-<!ENTITY bsol     "&#92;"><!-- U+005C REVERSE SOLIDUS                   ("\\")        -->
-<!ENTITY rsqb     "&#93;"><!-- U+005D RIGHT SQUARE BRACKET              ("]")         -->
-<!ENTITY circ     "&#94;"><!-- U+005E CIRCUMFLEX ACCENT                 ("^")         -->
-<!ENTITY lowbar   "&#95;"><!-- U+005F LOW LINE                          ("_")         -->
-<!ENTITY grave    "&#96;"><!-- U+0060 GRAVE ACCENT                      ("`")         -->
-<!ENTITY lcub    "&#123;"><!-- U+007B LEFT CURLY BRACKET                ("{")         -->
-<!ENTITY verbar  "&#124;"><!-- U+007C VERTICAL LINE                     ("|")         -->
-<!ENTITY rcub    "&#125;"><!-- U+007D RIGHT CURLY BRACKET               ("}")         -->
-
-<!-- Useful Unicode -->
-<!ENTITY Zcaron  "&#381;"><!-- U+017D LATIN CAPITAL LETTER Z WITH CARON ("Z")         -->
-<!ENTITY zcaron  "&#382;"><!-- U+017E LATIN SMALL LETTER Z WITH CARON   ("z")         -->
-<!ENTITY dash   "&#8208;"><!-- U+2010 HYPHEN                            ("-")         -->
-<!ENTITY nbhy   "&#8209;"><!-- U+2011 NON-BREAKING HYPHEN               (special "-") -->
-<!ENTITY wj     "&#8288;"><!-- U+2060 WORD JOINER                       (special "")  -->
-
-<!-- EOF -->
diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl b/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl
deleted file mode 100644
index 0cea58e933a114ab429e2cd2ca9ea6580b042aea..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-  <xsl:output method="xml"/>
-
-  <xsl:template match='/'>
-    <refcheck>
-      <xsl:apply-templates select='//xref' mode='missing'/>
-      <xsl:apply-templates select='//reference' mode='orphans'/>
-      <xsl:apply-templates select='//references[@dwdrfc-type = "norm"]' mode='normcheck'/>
-      <xsl:apply-templates select='//xref[@dwdrfc-type = "norm"]' mode='normrefs'/>
-    </refcheck>
-  </xsl:template>
-
-  <xsl:template match='xref' mode='missing'>
-    <xsl:param name='refname'>
-      <xsl:value-of select='@target'/>
-    </xsl:param>
-    <xsl:param name='reftgt'>
-      <xsl:value-of select='//*[@anchor = $refname]/@anchor'/>
-    </xsl:param>
-    <xsl:choose>
-      <xsl:when test='$reftgt = $refname'/>
-      <xsl:otherwise>
-        <missing><xsl:value-of select='$refname'/></missing><xsl:text>
-      </xsl:text>
-    </xsl:otherwise>
-  </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match='xref' mode='normrefs'>
-    <xsl:param name='refname'>
-      <xsl:value-of select='@target'/>
-    </xsl:param>
-    <xsl:param name='reftgt'>
-      <xsl:value-of select='//references[@dwdrfc-type = "norm"]/*[@anchor = $refname]/@anchor'/>
-    </xsl:param>
-    <xsl:choose>
-      <xsl:when test='$reftgt = $refname'/>
-      <xsl:otherwise>
-        <missing-norm><xsl:value-of select='$refname'/></missing-norm><xsl:text>
-      </xsl:text>
-    </xsl:otherwise>
-  </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match='reference' mode='orphans'>
-    <xsl:param name='refname'>
-      <xsl:value-of select='@anchor'/>
-    </xsl:param>
-    <xsl:param name='reftgt'>
-      <xsl:value-of select='//xref[@target = $refname]/@target'/>
-    </xsl:param>
-    <xsl:if test='$reftgt != $refname'>
-      <orphan><xsl:value-of select='$refname'/></orphan><xsl:text>
-    </xsl:text>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match='references' mode='normcheck'>
-  <xsl:apply-templates mode='normcheck'/>
-</xsl:template>
-
-<xsl:template match='*' mode='normcheck'>
-  <!-- Need to find at least one normative reference -->
-  <xsl:param name='refname'>
-    <xsl:value-of select='@anchor'/>
-  </xsl:param>
-  <xsl:param name='reftgt'>
-    <xsl:value-of select='//xref[@dwdrfc-type = "norm" and @target = $refname]/@target'/>
-  </xsl:param>
-  <xsl:if test='$refname != $reftgt'>
-    <normchk><xsl:value-of select='$refname'/></normchk><xsl:text>
-</xsl:text>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match='text()' mode='normcheck'/>
-
-</xsl:stylesheet>
diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent b/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent
deleted file mode 100644
index 3d4a07dd6ebe8ecb23535cf20b66dc16afe43991..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent
+++ /dev/null
@@ -1,165 +0,0 @@
-<!-- rfc2629-xhtml.ent
-
-     Character entity set for RFC-2629 source xml documents.
-     There is no need to invoke this directly from
-     the source document itself; just invoke the DTD.
-
-     These are known to (X)HTML, so any converter to these
-     formats can just leave them as is without having
-     to invoke this file from the output file.
-
-     Conversion to txt or nroff format will replace
-     these entities by the parenthesized text.
-
-     Typical invocation:
-       <!ENTITY % rfc2629-xhtml
-                PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN"
-                       "http://xml.resource.org/authoring/rfc2629-xhtml.ent">
-       %rfc2629-xhtml;
--->
-
-<!-- All of ISO Latin 1 -->
-<!ENTITY nbsp    "&#160;"><!-- U+00A0 NO-BREAK SPACE                             (special " ")        -->
-<!ENTITY iexcl   "&#161;"><!-- U+00A1 INVERTED EXCLAMATION MARK                  ("!")                -->
-<!ENTITY cent    "&#162;"><!-- U+00A2 CENT SIGN                                  ("[cents]")          -->
-<!ENTITY pound   "&#163;"><!-- U+00A3 POUND SIGN                                 ("GBP")              -->
-<!ENTITY curren  "&#164;"><!-- U+00A4 CURRENCY SIGN                              ("[currency units]") -->
-<!ENTITY yen     "&#165;"><!-- U+00A5 YEN SIGN                                   ("JPY")              -->
-<!ENTITY brvbar  "&#166;"><!-- U+00A6 BROKEN BAR                                 ("|")                -->
-<!ENTITY sect    "&#167;"><!-- U+00A7 SECTION SIGN                               ("S.")               -->
-<!ENTITY uml     "&#168;"><!-- U+00A8 DIAERESIS                                  ('"')                -->
-<!ENTITY copy    "&#169;"><!-- U+00A9 COPYRIGHT SIGN                             ("(C)")              -->
-<!ENTITY ordf    "&#170;"><!-- U+00AA FEMININE ORDINAL INDICATOR                 ("a")                -->
-<!ENTITY laquo   "&#171;"><!-- U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK  ("<<")               -->
-<!ENTITY not     "&#172;"><!-- U+00AC NOT SIGN                                   ("[not]")            -->
-<!ENTITY shy     "&#173;"><!-- U+00AD SOFT HYPHEN                                (ignored "")         -->
-<!ENTITY reg     "&#174;"><!-- U+00AE REGISTERED SIGN                            ("(R)")              -->
-<!ENTITY macr    "&#175;"><!-- U+00AF MACRON                                     ("_")                -->
-<!ENTITY deg     "&#176;"><!-- U+00B0 DEGREE SIGN                                ("o")                -->
-<!ENTITY plusmn  "&#177;"><!-- U+00B1 PLUS-MINUS SIGN                            ("+/-")              -->
-<!ENTITY sup2    "&#178;"><!-- U+00B2 SUPERSCRIPT TWO                            ("^2")               -->
-<!ENTITY sup3    "&#179;"><!-- U+00B3 SUPERSCRIPT THREE                          ("^3")               -->
-<!ENTITY acute   "&#180;"><!-- U+00B4 ACUTE ACCENT                               ("'")                -->
-<!ENTITY micro   "&#181;"><!-- U+00B5 MICRO SIGN                                 ("[micro]")          -->
-<!ENTITY para    "&#182;"><!-- U+00B6 PILCROW SIGN                               ("P.")               -->
-<!ENTITY middot  "&#183;"><!-- U+00B7 MIDDLE DOT                                 (".")                -->
-<!ENTITY cedil   "&#184;"><!-- U+00B8 CEDILLA                                    (",")                -->
-<!ENTITY sup1    "&#185;"><!-- U+00B9 SUPERSCRIPT ONE                            ("^1")               -->
-<!ENTITY ordm    "&#186;"><!-- U+00BA MASCULINE ORDINAL INDICATOR                ("o")                -->
-<!ENTITY raquo   "&#187;"><!-- U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (">>")               -->
-<!ENTITY frac14  "&#188;"><!-- U+00BC VULGAR FRACTION ONE QUARTER                ("1/4")              -->
-<!ENTITY frac12  "&#189;"><!-- U+00BD VULGAR FRACTION ONE HALF                   ("1/2")              -->
-<!ENTITY frac34  "&#190;"><!-- U+00BE VULGAR FRACTION THREE QUARTERS             ("3/4")              -->
-<!ENTITY iquest  "&#191;"><!-- U+00BF INVERTED QUESTION MARK                     ("?")                -->
-<!ENTITY Agrave  "&#192;"><!-- U+00C0 LATIN CAPITAL LETTER A WITH GRAVE          ("A")                -->
-<!ENTITY Aacute  "&#193;"><!-- U+00C1 LATIN CAPITAL LETTER A WITH ACUTE          ("A")                -->
-<!ENTITY Acirc   "&#194;"><!-- U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX     ("A")                -->
-<!ENTITY Atilde  "&#195;"><!-- U+00C3 LATIN CAPITAL LETTER A WITH TILDE          ("A")                -->
-<!ENTITY Auml    "&#196;"><!-- U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS      ("Ae")               -->
-<!ENTITY Aring   "&#197;"><!-- U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE     ("Ae")               -->
-<!ENTITY AElig   "&#198;"><!-- U+00C6 LATIN CAPITAL LETTER AE                    ("AE")               -->
-<!ENTITY Ccedil  "&#199;"><!-- U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA        ("C")                -->
-<!ENTITY Egrave  "&#200;"><!-- U+00C8 LATIN CAPITAL LETTER E WITH GRAVE          ("E")                -->
-<!ENTITY Eacute  "&#201;"><!-- U+00C9 LATIN CAPITAL LETTER E WITH ACUTE          ("E")                -->
-<!ENTITY Ecirc   "&#202;"><!-- U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX     ("E")                -->
-<!ENTITY Euml    "&#203;"><!-- U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS      ("E")                -->
-<!ENTITY Igrave  "&#204;"><!-- U+00CC LATIN CAPITAL LETTER I WITH GRAVE          ("I")                -->
-<!ENTITY Iacute  "&#205;"><!-- U+00CD LATIN CAPITAL LETTER I WITH ACUTE          ("I")                -->
-<!ENTITY Icirc   "&#206;"><!-- U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX     ("I")                -->
-<!ENTITY Iuml    "&#207;"><!-- U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS      ("I")                -->
-<!ENTITY ETH     "&#208;"><!-- U+00D0 LATIN CAPITAL LETTER ETH                   ("[ETH]")            -->
-<!ENTITY Ntilde  "&#209;"><!-- U+00D1 LATIN CAPITAL LETTER N WITH TILDE          ("N")                -->
-<!ENTITY Ograve  "&#210;"><!-- U+00D2 LATIN CAPITAL LETTER O WITH GRAVE          ("O")                -->
-<!ENTITY Oacute  "&#211;"><!-- U+00D3 LATIN CAPITAL LETTER O WITH ACUTE          ("O")                -->
-<!ENTITY Ocirc   "&#212;"><!-- U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX     ("O")                -->
-<!ENTITY Otilde  "&#213;"><!-- U+00D5 LATIN CAPITAL LETTER O WITH TILDE          ("O")                -->
-<!ENTITY Ouml    "&#214;"><!-- U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS      ("Oe")               -->
-<!ENTITY times   "&#215;"><!-- U+00D7 MULTIPLICATION SIGN                        ("x")                -->
-<!ENTITY Oslash  "&#216;"><!-- U+00D8 LATIN CAPITAL LETTER O WITH STROKE         ("Oe")               -->
-<!ENTITY Ugrave  "&#217;"><!-- U+00D9 LATIN CAPITAL LETTER U WITH GRAVE          ("U")                -->
-<!ENTITY Uacute  "&#218;"><!-- U+00DA LATIN CAPITAL LETTER U WITH ACUTE          ("U")                -->
-<!ENTITY Ucirc   "&#219;"><!-- U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX     ("U")                -->
-<!ENTITY Uuml    "&#220;"><!-- U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS      ("Ue")               -->
-<!ENTITY Yacute  "&#221;"><!-- U+00DD LATIN CAPITAL LETTER Y WITH ACUTE          ("Y")                -->
-<!ENTITY THORN   "&#222;"><!-- U+00DE LATIN CAPITAL LETTER THORN                 ("[THORN]")          -->
-<!ENTITY szlig   "&#223;"><!-- U+00DF LATIN SMALL LETTER SHARP S                 ("ss")               -->
-<!ENTITY agrave  "&#224;"><!-- U+00E0 LATIN SMALL LETTER A WITH GRAVE            ("a")                -->
-<!ENTITY aacute  "&#225;"><!-- U+00E1 LATIN SMALL LETTER A WITH ACUTE            ("a")                -->
-<!ENTITY acirc   "&#226;"><!-- U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX       ("a")                -->
-<!ENTITY atilde  "&#227;"><!-- U+00E3 LATIN SMALL LETTER A WITH TILDE            ("a")                -->
-<!ENTITY auml    "&#228;"><!-- U+00E4 LATIN SMALL LETTER A WITH DIAERESIS        ("ae")               -->
-<!ENTITY aring   "&#229;"><!-- U+00E5 LATIN SMALL LETTER A WITH RING ABOVE       ("ae")               -->
-<!ENTITY aelig   "&#230;"><!-- U+00E6 LATIN SMALL LETTER AE                      ("ae")               -->
-<!ENTITY ccedil  "&#231;"><!-- U+00E7 LATIN SMALL LETTER C WITH CEDILLA          ("c")                -->
-<!ENTITY egrave  "&#232;"><!-- U+00E8 LATIN SMALL LETTER E WITH GRAVE            ("e")                -->
-<!ENTITY eacute  "&#233;"><!-- U+00E9 LATIN SMALL LETTER E WITH ACUTE            ("e")                -->
-<!ENTITY ecirc   "&#234;"><!-- U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX       ("e")                -->
-<!ENTITY euml    "&#235;"><!-- U+00EB LATIN SMALL LETTER E WITH DIAERESIS        ("e")                -->
-<!ENTITY igrave  "&#236;"><!-- U+00EC LATIN SMALL LETTER I WITH GRAVE            ("i")                -->
-<!ENTITY iacute  "&#237;"><!-- U+00ED LATIN SMALL LETTER I WITH ACUTE            ("i")                -->
-<!ENTITY icirc   "&#238;"><!-- U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX       ("i")                -->
-<!ENTITY iuml    "&#239;"><!-- U+00EF LATIN SMALL LETTER I WITH DIAERESIS        ("i")                -->
-<!ENTITY eth     "&#240;"><!-- U+00F0 LATIN SMALL LETTER ETH                     ("[eth]")            -->
-<!ENTITY ntilde  "&#241;"><!-- U+00F1 LATIN SMALL LETTER N WITH TILDE            ("n")                -->
-<!ENTITY ograve  "&#242;"><!-- U+00F2 LATIN SMALL LETTER O WITH GRAVE            ("o")                -->
-<!ENTITY oacute  "&#243;"><!-- U+00F3 LATIN SMALL LETTER O WITH ACUTE            ("o")                -->
-<!ENTITY ocirc   "&#244;"><!-- U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX       ("o")                -->
-<!ENTITY otilde  "&#245;"><!-- U+00F5 LATIN SMALL LETTER O WITH TILDE            ("o")                -->
-<!ENTITY ouml    "&#246;"><!-- U+00F6 LATIN SMALL LETTER O WITH DIAERESIS        ("oe")               -->
-<!ENTITY divide  "&#247;"><!-- U+00F7 DIVISION SIGN                              ("/")                -->
-<!ENTITY oslash  "&#248;"><!-- U+00F8 LATIN SMALL LETTER O WITH STROKE           ("oe")               -->
-<!ENTITY ugrave  "&#249;"><!-- U+00F9 LATIN SMALL LETTER U WITH GRAVE            ("u")                -->
-<!ENTITY uacute  "&#250;"><!-- U+00FA LATIN SMALL LETTER U WITH ACUTE            ("u")                -->
-<!ENTITY ucirc   "&#251;"><!-- U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX       ("u")                -->
-<!ENTITY uuml    "&#252;"><!-- U+00FC LATIN SMALL LETTER U WITH DIAERESIS        ("ue")               -->
-<!ENTITY yacute  "&#253;"><!-- U+00FD LATIN SMALL LETTER Y WITH ACUTE            ("y")                -->
-<!ENTITY thorn   "&#254;"><!-- U+00FE LATIN SMALL LETTER THORN                   ("[thorn]")          -->
-<!ENTITY yuml    "&#255;"><!-- U+00FF LATIN SMALL LETTER Y WITH DIAERESIS        ("y")                -->
-
-<!-- Some of ISO Latin 9 and 10 -->
-<!ENTITY OElig   "&#338;"><!-- U+0152 LATIN CAPITAL LIGATURE OE                  ("OE")               -->
-<!ENTITY oelig   "&#339;"><!-- U+0153 LATIN SMALL LIGATURE OE                    ("oe")               -->
-<!ENTITY Scaron  "&#352;"><!-- U+0160 LATIN CAPITAL LETTER S WITH CARON          ("S")                -->
-<!ENTITY scaron  "&#353;"><!-- U+0161 LATIN SMALL LETTER S WITH CARON            ("s")                -->
-<!ENTITY Yuml    "&#376;"><!-- U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS      ("Y")                -->
-
-<!-- Other Unicode (including some characters from the windows-1252 repertoire) -->
-<!ENTITY fnof    "&#402;"><!-- U+0192 LATIN SMALL LETTER F WITH HOOK             ("f")                -->
-<!ENTITY tilde   "&#732;"><!-- U+02DC SMALL TILDE                                ("~")                -->
-<!ENTITY ensp   "&#8194;"><!-- U+2002 EN SPACE                                   (" ")                -->
-<!ENTITY emsp   "&#8195;"><!-- U+2003 EM SPACE                                   (" ")                -->
-<!ENTITY thinsp "&#8201;"><!-- U+2009 THIN SPACE                                 (" ")                -->
-<!ENTITY ndash  "&#8211;"><!-- U+2013 EN DASH                                    ("-")                -->
-<!ENTITY mdash  "&#8212;"><!-- U+2014 EM DASH                                    ("-\u002D")          -->
-<!ENTITY lsquo  "&#8216;"><!-- U+2018 LEFT SINGLE QUOTATION MARK                 ("'")                -->
-<!ENTITY rsquo  "&#8217;"><!-- U+2019 RIGHT SINGLE QUOTATION MARK                ("'")                -->
-<!ENTITY sbquo  "&#8218;"><!-- U+201A SINGLE LOW-9 QUOTATION MARK                ("'")                -->
-<!ENTITY ldquo  "&#8220;"><!-- U+201C LEFT DOUBLE QUOTATION MARK                 ('"')                -->
-<!ENTITY rdquo  "&#8221;"><!-- U+201D RIGHT DOUBLE QUOTATION MARK                ('"')                -->
-<!ENTITY bdquo  "&#8222;"><!-- U+201E DOUBLE LOW-9 QUOTATION MARK                ('"')                -->
-<!ENTITY dagger "&#8224;"><!-- U+2020 DAGGER                                     ("*!*")              -->
-<!ENTITY Dagger "&#8225;"><!-- U+2021 DOUBLE DAGGER                              ("*!!*")             -->
-<!ENTITY bull   "&#8226;"><!-- U+2022 BULLET                                     ("o")                -->
-<!ENTITY hellip "&#8230;"><!-- U+2026 HORIZONTAL ELLIPSIS                        ("...")              -->
-<!ENTITY permil "&#8242;"><!-- U+2030 PER MILLE SIGN                             ("[/1000]")          -->
-<!ENTITY prime  "&#8242;"><!-- U+2032 PRIME                                      ("'")                -->
-<!ENTITY Prime  "&#8243;"><!-- U+2033 DOUBLE PRIME                               ('"')                -->
-<!ENTITY lsaquo "&#8249;"><!-- U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK  ("<")                -->
-<!ENTITY rsaquo "&#8250;"><!-- U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (">")                -->
-<!ENTITY frasl  "&#8260;"><!-- U+2044 FRACTION SLASH                             ("/")                -->
-<!ENTITY euro   "&#8364;"><!-- U+20AC EURO SIGN                                  ("EUR")              -->
-<!ENTITY trade  "&#8482;"><!-- U+2122 TRADE MARK SIGN                            ("[TM]")             -->
-<!ENTITY larr   "&#8592;"><!-- U+2190 LEFTWARDS ARROW                            ("<-\u002D")         -->
-<!ENTITY rarr   "&#8594;"><!-- U+2192 RIGHTWARDS ARROW                           ("\u002D->")         -->
-<!ENTITY harr   "&#8596;"><!-- U+2194 LEFT RIGHT ARROW                           ("<->")              -->
-<!ENTITY lArr   "&#8656;"><!-- U+21D0 LEFTWARDS DOUBLE ARROW                     ("<==")              -->
-<!ENTITY rArr   "&#8658;"><!-- U+21D2 RIGHTWARDS DOUBLE ARROW                    ("==>")              -->
-<!ENTITY hArr   "&#8660;"><!-- U+21D4 LEFT RIGHT DOUBLE ARROW                    ("<=>")              -->
-<!ENTITY minus  "&#8722;"><!-- U+2212 MINUS SIGN                                 ("-")                -->
-<!ENTITY lowast "&#8727;"><!-- U+2217 ASTERISK OPERATOR                          ("*")                -->
-<!ENTITY le     "&#8804;"><!-- U+2264 LESS-THAN OR EQUAL TO                      ("<=")               -->
-<!ENTITY ge     "&#8805;"><!-- U+2265 GREATER-THAN OR EQUAL TO                   (">=")               -->
-<!ENTITY lang   "&#9001;"><!-- U+2329 LEFT-POINTING ANGLE BRACKET                ("<")                -->
-<!ENTITY rang   "&#9002;"><!-- U+232A RIGHT-POINTING ANGLE BRACKET               (">")                -->
-
-<!-- EOF -->
diff --git a/third_party/memcached/doc/xml2rfc/rfc2629.dtd b/third_party/memcached/doc/xml2rfc/rfc2629.dtd
deleted file mode 100644
index bc3026079a576940219e4243004547e431e6814a..0000000000000000000000000000000000000000
--- a/third_party/memcached/doc/xml2rfc/rfc2629.dtd
+++ /dev/null
@@ -1,304 +0,0 @@
-<!--
-  revised DTD for the RFC document series, draft of 2007-03-29
-  -->
-
-
-<!--
-  Typical invocation:
-      <!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN"
-                           "http://xml.resource.org/authoring/rfc2629.dtd" [
-        ... dtd subset ...
-      ]>
-    or
-      <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
-        ... dtd subset ...
-      ]>
-  -->
-
-
-<!--
-  Contents
-
-    Character entities
-
-    DTD data types
-
-    The top-level
-
-    Front matter
-
-    The Body
-
-    Back matter
-  -->
-
-
-<!--
-  Character entities
-  -->
-
-
-<!ENTITY % rfc2629-xhtml
-         PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN"
-                "rfc2629-xhtml.ent">
-%rfc2629-xhtml;
-
-<!ENTITY % rfc2629-other
-         PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN"
-                "rfc2629-other.ent">
-%rfc2629-other;
-
-
-<!--
-  DTD data types:
-
-        entity        description
-        ======        ===============================================
-        NUMBER        [0-9]+
-        NUMBERS       a comma-separated list of NUMBER
-
-        DAY           the day of the month, e.g., "1"
-        MONTH         the month of the year, e.g., "January"
-        YEAR          a four-digit year, e.g., "1999"
-
-        URI           e.g., "http://invisible.net/"
-
-        ATEXT/CTEXT   printable ASCII text (no line-terminators)
-
-        TEXT          character data
-  -->
-
-
-<!ENTITY % NUMBER     "CDATA">
-<!ENTITY % NUMBERS    "CDATA">
-
-<!ENTITY % DAY        "CDATA">
-<!ENTITY % MONTH      "CDATA">
-<!ENTITY % YEAR       "CDATA">
-
-<!ENTITY % URI        "CDATA">
-
-<!ENTITY % ATEXT      "CDATA">
-<!ENTITY % CTEXT      "#PCDATA">
-
-<!ENTITY % TEXT       "#PCDATA">
-
-<!ENTITY   rfc.number "XXXX">
-
-
-<!--
-  The top-level
-  -->
-
-
-<!--
-  attributes for the "rfc" element are supplied by the RFC
-  editor. when preparing drafts, authors should leave them blank.
-
-  the "seriesNo" attribute is used if the category is, e.g., BCP.
-  -->
-<!ELEMENT rfc         (front,middle,back?)>
-<!ATTLIST rfc
-          number      %NUMBER;           #IMPLIED
-          obsoletes   %NUMBERS;          ""
-          updates     %NUMBERS;          ""
-          category    (std|bcp|info|exp|historic)
-                                         #IMPLIED
-          seriesNo    %NUMBER;           #IMPLIED
-          ipr         (full2026|noDerivativeWorks2026|none
-                      |full3667|noModification3667|noDerivatives3667
-                      |full3978|noModification3978|noDerivatives3978)
-                                         #IMPLIED
-          iprExtract  IDREF              #IMPLIED
-          submissionType
-                      (IETF|independent) "IETF"
-          docName     %ATEXT;            #IMPLIED
-          xml:lang    %ATEXT;            "en">
-
-
-<!--
-  Front matter
-  -->
-
-
-<!ELEMENT front       (title,author+,date,area*,workgroup*,keyword*,
-                       abstract?,note*)>
-
-<!-- the "abbrev" attribute is used for headers, etc. -->
-<!ELEMENT title       (%CTEXT;)>
-<!ATTLIST title
-          abbrev      %ATEXT;            #IMPLIED>
-
-<!ELEMENT author      (organization,address?)>
-<!ATTLIST author
-          initials    %ATEXT;            #IMPLIED
-          surname     %ATEXT;            #IMPLIED
-          fullname    %ATEXT;            #IMPLIED
-          role        (editor)           #IMPLIED>
-
-<!ELEMENT organization
-                      (%CTEXT;)>
-<!ATTLIST organization
-          abbrev      %ATEXT;            #IMPLIED>
-
-<!ELEMENT address     (postal?,phone?,facsimile?,email?,uri?)>
-
-<!-- this content model should be more strict:
-     at most one of each the city, region, code, and country
-     elements may be present -->
-<!ELEMENT postal      (street+,(city|region|code|country)*)>
-<!ELEMENT street      (%CTEXT;)>
-<!ELEMENT city        (%CTEXT;)>
-<!ELEMENT region      (%CTEXT;)>
-<!ELEMENT code        (%CTEXT;)>
-<!ELEMENT country     (%CTEXT;)>
-<!ELEMENT phone       (%CTEXT;)>
-<!ELEMENT facsimile   (%CTEXT;)>
-<!ELEMENT email       (%CTEXT;)>
-<!ELEMENT uri         (%CTEXT;)>
-
-<!ELEMENT date        EMPTY>
-<!ATTLIST date
-          day         %DAY;              #IMPLIED
-          month       %MONTH;            #IMPLIED
-          year        %YEAR;             #IMPLIED>
-
-<!-- meta-data... -->
-<!ELEMENT area        (%CTEXT;)>
-<!ELEMENT workgroup   (%CTEXT;)>
-<!ELEMENT keyword     (%CTEXT;)>
-
-<!ELEMENT abstract    (t)+>
-<!ELEMENT note        (t)+>
-<!ATTLIST note
-          title       %ATEXT;            #REQUIRED>
-
-
-<!--
-  The body
-  -->
-
-
-<!-- later on, may be (section+,appendix*,section*) -->
-<!ELEMENT middle      (section+)>
-
-<!ELEMENT section     ((t|figure|texttable|iref)*,section*)>
-<!ATTLIST section
-          anchor      ID                 #IMPLIED
-          title       %ATEXT;            #REQUIRED
-          toc         (include|exclude|default)
-                                         "default">
-
-<!--
-<!ELEMENT appendix    ((t|figure|texttable|iref)*,appendix*)>
-<!ATTLIST appendix
-          anchor      ID                 #IMPLIED
-          title       %ATEXT;            #REQUIRED
-          toc         (include|exclude|default)
-                                         "default">
-  -->
-
-<!-- use of <figure/> is deprecated... -->
-<!ELEMENT t           (%TEXT;|list|figure|xref|eref|iref|cref|spanx|vspace)*>
-<!ATTLIST t
-          anchor      ID                 #IMPLIED
-          hangText    %ATEXT;            #IMPLIED>
-
-<!-- the value of the style attribute is inherited from the closest
-     parent -->
-<!ELEMENT list        (t+)>
-<!ATTLIST list
-          style       %ATEXT;            #IMPLIED
-          hangIndent  %NUMBER;           #IMPLIED
-          counter     %ATEXT;            #IMPLIED>
-
-<!ELEMENT xref        (%CTEXT;)>
-<!ATTLIST xref
-          target      IDREF              #REQUIRED
-          pageno      (true|false)       "false"
-          format      (counter|title|none|default)
-                                         "default">
-
-<!ELEMENT eref        (%CTEXT;)>
-<!ATTLIST eref
-          target      %URI;              #REQUIRED>
-
-<!ELEMENT iref        EMPTY>
-<!ATTLIST iref
-          item        %ATEXT;            #REQUIRED
-          subitem     %ATEXT;            ""
-          primary    (true|false)       "false">
-
-<!ELEMENT cref        (%CTEXT;)>
-<!ATTLIST cref
-          anchor      ID                 #IMPLIED
-          source      %ATEXT;            #IMPLIED>
-
-<!ELEMENT spanx       (%CTEXT;)>
-<!ATTLIST spanx
-          style       %ATEXT;            "emph">
-
-<!ELEMENT vspace      EMPTY>
-<!ATTLIST vspace
-          blankLines  %NUMBER;           "0">
-
-<!ELEMENT figure      (iref*,preamble?,artwork,postamble?)>
-<!ATTLIST figure
-          anchor      ID                 #IMPLIED
-          title       %ATEXT;            ""
-          src         %URI;              #IMPLIED
-          align       (left|center|right) "left"
-          alt         %ATEXT;            ""
-          width       %ATEXT;            ""
-          height      %ATEXT;            "">
-
-<!ELEMENT preamble    (%TEXT;|xref|eref|iref|cref|spanx)*>
-<!ELEMENT artwork     (%TEXT;)*>
-<!ATTLIST artwork
-          xml:space   (default|preserve) "preserve"
-          name        %ATEXT;            ""
-          type        %ATEXT;            ""
-          src         %URI;              #IMPLIED
-          align       (left|center|right) "left"
-          alt         %ATEXT;            ""
-          width       %ATEXT;            ""
-          height      %ATEXT;            "">
-
-<!ELEMENT postamble   (%TEXT;|xref|eref|iref|cref|spanx)*>
-
-<!ELEMENT texttable   (preamble?,ttcol+,c*,postamble?)>
-<!ATTLIST texttable
-          anchor      ID                 #IMPLIED
-          title       %ATEXT;            "">
-<!ELEMENT ttcol       (%CTEXT;)>
-<!ATTLIST ttcol
-          width       %ATEXT;           #IMPLIED
-          align       (left|center|right) "left">
-<!ELEMENT c           (%TEXT;|xref|eref|iref|cref|spanx)*>
-
-
-<!--
-  Back matter
-  -->
-
-
-<!-- sections, if present, are appendices -->
-<!ELEMENT back        (references*,section*)>
-
-<!ELEMENT references  (reference+)>
-<!ATTLIST references
-          title       %ATEXT;            "References">
-<!ELEMENT reference   (front,seriesInfo*,format*,annotation*)>
-<!ATTLIST reference
-          anchor      ID                 #IMPLIED
-          target      %URI;              #IMPLIED>
-<!ELEMENT seriesInfo  EMPTY>
-<!ATTLIST seriesInfo
-          name        %ATEXT;            #REQUIRED
-          value       %ATEXT;            #REQUIRED>
-<!ELEMENT format      EMPTY>
-<!ATTLIST format
-          target      %URI;              #IMPLIED
-          type        %ATEXT;            #REQUIRED
-          octets      %NUMBER;           #IMPLIED>
-<!ELEMENT annotation  (%TEXT;|xref|eref|iref|cref|spanx)*>
diff --git a/third_party/memcached/t/64bit.t b/third_party/memcached/t/64bit.t
deleted file mode 100755
index 425ff8aa3443732c6a0fdcf6fc0690d1dfbcf0f7..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/64bit.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-$ENV{T_MEMD_INITIAL_MALLOC} = "4294967328"; # 2**32 + 32 , just over 4GB
-$ENV{T_MEMD_SLABS_ALLOC}    = 0;  # don't preallocate slabs
-
-my $server = new_memcached("-m 4098 -M");
-my $sock = $server->sock;
-
-my ($stats, $slabs) = @_;
-
-$stats = mem_stats($sock);
-
-if ($stats->{'pointer_size'} eq "32") {
-    plan skip_all => 'Skipping 64-bit tests on 32-bit build';
-    exit 0;
-} else {
-    plan tests => 6;
-}
-
-is($stats->{'pointer_size'}, 64, "is 64 bit");
-is($stats->{'limit_maxbytes'}, "4297064448", "max bytes is 4098 MB");
-
-$slabs = mem_stats($sock, 'slabs');
-is($slabs->{'total_malloced'}, "4294967328", "expected (faked) value of total_malloced");
-is($slabs->{'active_slabs'}, 0, "no active slabs");
-
-my $hit_limit = 0;
-for (1..5) {
-    my $size = 400 * 1024;
-    my $data = "a" x $size;
-    print $sock "set big$_ 0 0 $size\r\n$data\r\n";
-    my $res = <$sock>;
-    $hit_limit = 1 if $res ne "STORED\r\n";
-}
-ok($hit_limit, "hit size limit");
-
-$slabs = mem_stats($sock, 'slabs');
-is($slabs->{'active_slabs'}, 1, "1 active slab");
diff --git a/third_party/memcached/t/binary-get.t b/third_party/memcached/t/binary-get.t
deleted file mode 100755
index f57a8a34d888b8e5750f8888c676049e37615894..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/binary-get.t
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 8;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-my $count = 1;
-
-foreach my $blob ("mooo\0", "mumble\0\0\0\0\r\rblarg", "\0", "\r") {
-    my $key = "foo$count";
-    my $len = length($blob);
-    print "len is $len\n";
-    print $sock "set $key 0 0 $len\r\n$blob\r\n";
-    is(scalar <$sock>, "STORED\r\n", "stored $key");
-    mem_get_is($sock, $key, $blob);
-    $count++;
-}
-
diff --git a/third_party/memcached/t/bogus-commands.t b/third_party/memcached/t/bogus-commands.t
deleted file mode 100755
index 37680c154b0903ebeaf5a484d95d18d13985b1e2..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/bogus-commands.t
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 1;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-print $sock "boguscommand slkdsldkfjsd\r\n";
-is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "got error back");
diff --git a/third_party/memcached/t/cas.t b/third_party/memcached/t/cas.t
deleted file mode 100644
index e04a26a7b6a1649300327bfd604549449d528658..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/cas.t
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 43;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-
-my $server = new_memcached();
-my $sock = $server->sock;
-my $sock2 = $server->new_sock;
-
-my @result;
-my @result2;
-
-ok($sock != $sock2, "have two different connections open");
-
-sub check_args {
-    my ($line, $name) = @_;
-
-    my $svr = new_memcached();
-    my $s = $svr->sock;
-
-    print $s $line;
-    is(scalar <$s>, "CLIENT_ERROR bad command line format\r\n", $name);
-    undef $svr;
-}
-
-check_args "cas bad blah 0 0 0\r\n\r\n", "bad flags";
-check_args "cas bad 0 blah 0 0\r\n\r\n", "bad exp";
-check_args "cas bad 0 0 blah 0\r\n\r\n", "bad cas";
-check_args "cas bad 0 0 0 blah\r\n\r\n", "bad size";
-
-# gets foo (should not exist)
-print $sock "gets foo\r\n";
-is(scalar <$sock>, "END\r\n", "gets failed");
-
-# set foo
-print $sock "set foo 0 0 6\r\nbarval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored barval");
-
-# gets foo and verify identifier exists
-@result = mem_gets($sock, "foo");
-mem_gets_is($sock,$result[0],"foo","barval");
-
-# cas fail
-print $sock "cas foo 0 0 6 123\r\nbarva2\r\n";
-is(scalar <$sock>, "EXISTS\r\n", "cas failed for foo");
-
-# gets foo - success
-@result = mem_gets($sock, "foo");
-mem_gets_is($sock,$result[0],"foo","barval");
-
-# cas success
-print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n";
-is(scalar <$sock>, "STORED\r\n", "cas success, set foo");
-
-# cas failure (reusing the same key)
-print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n";
-is(scalar <$sock>, "EXISTS\r\n", "reusing a CAS ID");
-
-# delete foo
-print $sock "delete foo\r\n";
-is(scalar <$sock>, "DELETED\r\n", "deleted foo");
-
-# cas missing
-print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n";
-is(scalar <$sock>, "NOT_FOUND\r\n", "cas failed, foo does not exist");
-
-# cas empty
-print $sock "cas foo 0 0 6 \r\nbarva2\r\n";
-is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "cas empty, throw error");
-# cant parse barval2\r\n
-is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "error out on barval2 parsing");
-
-# set foo1
-print $sock "set foo1 0 0 1\r\n1\r\n";
-is(scalar <$sock>, "STORED\r\n", "set foo1");
-# set foo2
-print $sock "set foo2 0 0 1\r\n2\r\n";
-is(scalar <$sock>, "STORED\r\n", "set foo2");
-
-# gets foo1 check
-print $sock "gets foo1\r\n";
-ok(scalar <$sock> =~ /VALUE foo1 0 1 (\d+)\r\n/, "gets foo1 regexp success");
-my $foo1_cas = $1;
-is(scalar <$sock>, "1\r\n","gets foo1 data is 1");
-is(scalar <$sock>, "END\r\n","gets foo1 END");
-
-# gets foo2 check
-print $sock "gets foo2\r\n";
-ok(scalar <$sock> =~ /VALUE foo2 0 1 (\d+)\r\n/,"gets foo2 regexp success");
-my $foo2_cas = $1;
-is(scalar <$sock>, "2\r\n","gets foo2 data is 2");
-is(scalar <$sock>, "END\r\n","gets foo2 END");
-
-# validate foo1 != foo2
-ok($foo1_cas != $foo2_cas,"foo1 != foo2 single-gets success");
-
-# multi-gets
-print $sock "gets foo1 foo2\r\n";
-ok(scalar <$sock> =~ /VALUE foo1 0 1 (\d+)\r\n/, "validating first set of data is foo1");
-$foo1_cas = $1;
-is(scalar <$sock>, "1\r\n", "validating foo1 set of data is 1");
-ok(scalar <$sock> =~ /VALUE foo2 0 1 (\d+)\r\n/, "validating second set of data is foo2");
-$foo2_cas = $1;
-is(scalar <$sock>, "2\r\n", "validating foo2 set of data is 2");
-is(scalar <$sock>, "END\r\n","validating foo1,foo2 gets is over - END");
-
-# validate foo1 != foo2
-ok($foo1_cas != $foo2_cas, "foo1 != foo2 multi-gets success");
-
-### simulate race condition with cas
-
-# gets foo1 - success
-@result = mem_gets($sock, "foo1");
-ok($result[0] != "", "sock - gets foo1 is not empty");
-
-# gets foo2 - success
-@result2 = mem_gets($sock2, "foo1");
-ok($result2[0] != "","sock2 - gets foo1 is not empty");
-
-print $sock "cas foo1 0 0 6 $result[0]\r\nbarva2\r\n";
-print $sock2 "cas foo1 0 0 5 $result2[0]\r\napple\r\n";
-
-my $res1 = <$sock>;
-my $res2 = <$sock2>;
-
-ok( ( $res1 eq "STORED\r\n" && $res2 eq "EXISTS\r\n") ||
-    ( $res1 eq "EXISTS\r\n" && $res2 eq "STORED\r\n"),
-    "cas on same item from two sockets");
-### bug 15: http://code.google.com/p/memcached/issues/detail?id=15
-
-# set foo
-print $sock "set bug15 0 0 1\r\n0\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored 0");
-
-# Check out the first gets.
-print $sock "gets bug15\r\n";
-ok(scalar <$sock> =~ /VALUE bug15 0 1 (\d+)\r\n/, "gets bug15 regexp success");
-my $bug15_cas = $1;
-is(scalar <$sock>, "0\r\n", "gets bug15 data is 0");
-is(scalar <$sock>, "END\r\n","gets bug15 END");
-
-# Increment
-print $sock "incr bug15 1\r\n";
-is(scalar <$sock>, "1\r\n", "incr worked");
-
-# Validate a changed CAS
-print $sock "gets bug15\r\n";
-ok(scalar <$sock> =~ /VALUE bug15 0 1 (\d+)\r\n/, "gets bug15 regexp success");
-my $next_bug15_cas = $1;
-is(scalar <$sock>, "1\r\n", "gets bug15 data is 0");
-is(scalar <$sock>, "END\r\n","gets bug15 END");
-
-ok($bug15_cas != $next_bug15_cas, "CAS changed");
diff --git a/third_party/memcached/t/expirations.t b/third_party/memcached/t/expirations.t
deleted file mode 100755
index c92125a90789fababfdd7e2fb4d1b8fbf66d8274..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/expirations.t
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 15;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-my $expire;
-
-sub wait_for_early_second {
-    my $have_hires = eval "use Time::HiRes (); 1";
-    if ($have_hires) {
-        my $tsh = Time::HiRes::time();
-        my $ts = int($tsh);
-        return if ($tsh - $ts) < 0.5;
-    }
-
-    my $ts = int(time());
-    while (1) {
-        my $t = int(time());
-        return if $t != $ts;
-        select undef, undef, undef, 0.10;  # 1/10th of a second sleeps until time changes.
-    }
-}
-
-wait_for_early_second();
-
-print $sock "set foo 0 1 6\r\nfooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-
-mem_get_is($sock, "foo", "fooval");
-sleep(1.5);
-mem_get_is($sock, "foo", undef);
-
-$expire = time() - 1;
-print $sock "set foo 0 $expire 6\r\nfooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-mem_get_is($sock, "foo", undef, "already expired");
-
-$expire = time() + 1;
-print $sock "set foo 0 $expire 6\r\nfoov+1\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-mem_get_is($sock, "foo", "foov+1");
-sleep(2.2);
-mem_get_is($sock, "foo", undef, "now expired");
-
-$expire = time() - 20;
-print $sock "set boo 0 $expire 6\r\nbooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored boo");
-mem_get_is($sock, "boo", undef, "now expired");
-
-print $sock "add add 0 2 6\r\naddval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored add");
-mem_get_is($sock, "add", "addval");
-# second add fails
-print $sock "add add 0 2 7\r\naddval2\r\n";
-is(scalar <$sock>, "NOT_STORED\r\n", "add failure");
-sleep(2.3);
-print $sock "add add 0 2 7\r\naddval3\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored add again");
-mem_get_is($sock, "add", "addval3");
diff --git a/third_party/memcached/t/flags.t b/third_party/memcached/t/flags.t
deleted file mode 100755
index e5231965991e60e1c1cbb5260bbe510a8801f678..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/flags.t
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 6;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-# set foo (and should get it)
-for my $flags (0, 123, 2**16-1) {
-    print $sock "set foo $flags 0 6\r\nfooval\r\n";
-    is(scalar <$sock>, "STORED\r\n", "stored foo");
-    mem_get_is({ sock => $sock,
-                 flags => $flags }, "foo", "fooval", "got flags $flags back");
-}
diff --git a/third_party/memcached/t/flush-all.t b/third_party/memcached/t/flush-all.t
deleted file mode 100755
index e113fc960181a3f115c0e6b62a9935042c335350..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/flush-all.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 14;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-my $expire;
-
-print $sock "set foo 0 0 6\r\nfooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-
-mem_get_is($sock, "foo", "fooval");
-print $sock "flush_all\r\n";
-is(scalar <$sock>, "OK\r\n", "did flush_all");
-mem_get_is($sock, "foo", undef);
-
-# Test flush_all with zero delay.
-print $sock "set foo 0 0 6\r\nfooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-
-mem_get_is($sock, "foo", "fooval");
-print $sock "flush_all 0\r\n";
-is(scalar <$sock>, "OK\r\n", "did flush_all");
-mem_get_is($sock, "foo", undef);
-
-# check that flush_all doesn't blow away items that immediately get set
-print $sock "set foo 0 0 3\r\nnew\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo = 'new'");
-mem_get_is($sock, "foo", 'new');
-
-# and the other form, specifying a flush_all time...
-my $expire = time() + 2;
-print $sock "flush_all $expire\r\n";
-is(scalar <$sock>, "OK\r\n", "did flush_all in future");
-
-print $sock "set foo 0 0 4\r\n1234\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo = '1234'");
-mem_get_is($sock, "foo", '1234');
-sleep(2.2);
-mem_get_is($sock, "foo", undef);
diff --git a/third_party/memcached/t/getset.t b/third_party/memcached/t/getset.t
deleted file mode 100755
index a36e19d05a1881ce3e3e773fffb308ac9e1f50c3..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/getset.t
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 26;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-
-# set foo (and should get it)
-print $sock "set foo 0 0 6\r\nfooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-mem_get_is($sock, "foo", "fooval");
-
-# add bar (and should get it)
-print $sock "add bar 0 0 6\r\nbarval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored barval");
-mem_get_is($sock, "bar", "barval");
-
-# add foo (but shouldn't get new value)
-print $sock "add foo 0 0 5\r\nfoov2\r\n";
-is(scalar <$sock>, "NOT_STORED\r\n", "not stored");
-mem_get_is($sock, "foo", "fooval");
-
-# replace bar (should work)
-print $sock "replace bar 0 0 6\r\nbarva2\r\n";
-is(scalar <$sock>, "STORED\r\n", "replaced barval 2");
-
-# replace notexist (shouldn't work)
-print $sock "replace notexist 0 0 6\r\nbarva2\r\n";
-is(scalar <$sock>, "NOT_STORED\r\n", "didn't replace notexist");
-
-# delete foo.
-print $sock "delete foo\r\n";
-is(scalar <$sock>, "DELETED\r\n", "deleted foo");
-
-# delete foo again.  not found this time.
-print $sock "delete foo\r\n";
-is(scalar <$sock>, "NOT_FOUND\r\n", "deleted foo, but not found");
-
-# add moo
-#
-print $sock "add moo 0 0 6\r\nmooval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored barval");
-mem_get_is($sock, "moo", "mooval");
-
-# check-and-set (cas) failure case, try to set value with incorrect cas unique val
-print $sock "cas moo 0 0 6 0\r\nMOOVAL\r\n";
-is(scalar <$sock>, "EXISTS\r\n", "check and set with invalid id");
-
-# test "gets", grab unique ID
-print $sock "gets moo\r\n";
-# VALUE moo 0 6 3084947704
-#
-my @retvals = split(/ /, scalar <$sock>);
-my $data = scalar <$sock>; # grab data
-my $dot  = scalar <$sock>; # grab dot on line by itself
-is($retvals[0], "VALUE", "get value using 'gets'");
-
-my $unique_id = $retvals[4];
-# clean off \r\n
-$unique_id =~ s/\r\n$//;
-ok($unique_id =~ /^\d+$/, "unique ID '$unique_id' is an integer");
-# now test that we can store moo with the correct unique id
-print $sock "cas moo 0 0 6 $unique_id\r\nMOOVAL\r\n";
-is(scalar <$sock>, "STORED\r\n");
-mem_get_is($sock, "moo", "MOOVAL");
-
-# pipeling is okay
-print $sock "set foo 0 0 6\r\nfooval\r\ndelete foo\r\nset foo 0 0 6\r\nfooval\r\ndelete foo\r\n";
-is(scalar <$sock>, "STORED\r\n",  "pipeline set");
-is(scalar <$sock>, "DELETED\r\n", "pipeline delete");
-is(scalar <$sock>, "STORED\r\n",  "pipeline set");
-is(scalar <$sock>, "DELETED\r\n", "pipeline delete");
-
-
-# Test sets up to a large size around 1MB.
-# Everything up to 1MB - 1k should succeed, everything 1MB +1k should fail.
-
-my $len = 1024;
-while ($len < 1024*1028) {
-    my $val = "B"x$len;
-    if ($len > (1024*1024)) {
-        # Ensure causing a memory overflow doesn't leave stale data.
-        print $sock "set foo_$len 0 0 3\r\nMOO\r\n";
-        is(scalar <$sock>, "STORED\r\n");
-        print $sock "set foo_$len 0 0 $len\r\n$val\r\n";
-        is(scalar <$sock>, "SERVER_ERROR object too large for cache\r\n", "failed to store size $len");
-        mem_get_is($sock, "foo_$len", "MOO");
-    } else {
-        print $sock "set foo_$len 0 0 $len\r\n$val\r\n";
-        is(scalar <$sock>, "STORED\r\n", "stored size $len");
-    }
-    $len += 1024 * 512;
-}
-
diff --git a/third_party/memcached/t/incrdecr.t b/third_party/memcached/t/incrdecr.t
deleted file mode 100755
index e0ba65f47e1c300b6f4595d90d661e9012b9ddac..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/incrdecr.t
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 23;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-# Bug 21
-print $sock "set bug21 0 0 19\r\n9223372036854775807\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored text");
-print $sock "incr bug21 1\r\n";
-is(scalar <$sock>, "9223372036854775808\r\n", "bug21 incr 1");
-print $sock "incr bug21 1\r\n";
-is(scalar <$sock>, "9223372036854775809\r\n", "bug21 incr 2");
-print $sock "decr bug21 1\r\n";
-is(scalar <$sock>, "9223372036854775808\r\n", "bug21 decr");
-
-print $sock "set num 0 0 1\r\n1\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored num");
-mem_get_is($sock, "num", 1, "stored 1");
-
-print $sock "incr num 1\r\n";
-is(scalar <$sock>, "2\r\n", "+ 1 = 2");
-mem_get_is($sock, "num", 2);
-
-print $sock "incr num 8\r\n";
-is(scalar <$sock>, "10\r\n", "+ 8 = 10");
-mem_get_is($sock, "num", 10);
-
-print $sock "decr num 1\r\n";
-is(scalar <$sock>, "9\r\n", "- 1 = 9");
-
-print $sock "decr num 9\r\n";
-is(scalar <$sock>, "0\r\n", "- 9 = 0");
-
-print $sock "decr num 5\r\n";
-is(scalar <$sock>, "0\r\n", "- 5 = 0");
-
-printf $sock "set num 0 0 10\r\n4294967296\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored 2**32");
-
-print $sock "incr num 1\r\n";
-is(scalar <$sock>, "4294967297\r\n", "4294967296 + 1 = 4294967297");
-
-printf $sock "set num 0 0 %d\r\n18446744073709551615\r\n", length("18446744073709551615");
-is(scalar <$sock>, "STORED\r\n", "stored 2**64-1");
-
-print $sock "incr num 1\r\n";
-is(scalar <$sock>, "0\r\n", "(2**64 - 1) + 1 = 0");
-
-print $sock "decr bogus 5\r\n";
-is(scalar <$sock>, "NOT_FOUND\r\n", "can't decr bogus key");
-
-print $sock "decr incr 5\r\n";
-is(scalar <$sock>, "NOT_FOUND\r\n", "can't incr bogus key");
-
-print $sock "set bigincr 0 0 1\r\n0\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored bigincr");
-print $sock "incr bigincr 18446744073709551610\r\n";
-is(scalar <$sock>, "18446744073709551610\r\n");
-
-print $sock "set text 0 0 2\r\nhi\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored hi");
-print $sock "incr text 1\r\n";
-is(scalar <$sock>,
-   "CLIENT_ERROR cannot increment or decrement non-numeric value\r\n",
-   "hi - 1 = 0");
diff --git a/third_party/memcached/t/lib/MemcachedTest.pm b/third_party/memcached/t/lib/MemcachedTest.pm
deleted file mode 100644
index 18410b1fa3b63620a82d0fff3bb2f1c62b9b3238..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/lib/MemcachedTest.pm
+++ /dev/null
@@ -1,260 +0,0 @@
-package MemcachedTest;
-use strict;
-use IO::Socket::INET;
-use IO::Socket::UNIX;
-use Exporter 'import';
-use Carp qw(croak);
-use vars qw(@EXPORT);
-
-# Instead of doing the substitution with Autoconf, we assume that
-# cwd == builddir.
-use Cwd;
-my $builddir = getcwd;
-
-
-@EXPORT = qw(new_memcached sleep mem_get_is mem_gets mem_gets_is mem_stats free_port);
-
-sub sleep {
-    my $n = shift;
-    select undef, undef, undef, $n;
-}
-
-sub mem_stats {
-    my ($sock, $type) = @_;
-    $type = $type ? " $type" : "";
-    print $sock "stats$type\r\n";
-    my $stats = {};
-    while (<$sock>) {
-        last if /^(\.|END)/;
-        /^(STAT|ITEM) (\S+)\s+([^\r\n]+)/;
-        #print " slabs: $_";
-        $stats->{$2} = $3;
-    }
-    return $stats;
-}
-
-sub mem_get_is {
-    # works on single-line values only.  no newlines in value.
-    my ($sock_opts, $key, $val, $msg) = @_;
-    my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {};
-    my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts;
-
-    my $expect_flags = $opts->{flags} || 0;
-    my $dval = defined $val ? "'$val'" : "<undef>";
-    $msg ||= "$key == $dval";
-
-    print $sock "get $key\r\n";
-    if (! defined $val) {
-        my $line = scalar <$sock>;
-        if ($line =~ /^VALUE/) {
-            $line .= scalar(<$sock>) . scalar(<$sock>);
-        }
-        Test::More::is($line, "END\r\n", $msg);
-    } else {
-        my $len = length($val);
-        my $body = scalar(<$sock>);
-        my $expected = "VALUE $key $expect_flags $len\r\n$val\r\nEND\r\n";
-        if (!$body || $body =~ /^END/) {
-            Test::More::is($body, $expected, $msg);
-            return;
-        }
-        $body .= scalar(<$sock>) . scalar(<$sock>);
-        Test::More::is($body, $expected, $msg);
-    }
-}
-
-sub mem_gets {
-    # works on single-line values only.  no newlines in value.
-    my ($sock_opts, $key) = @_;
-    my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {};
-    my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts;
-    my $val;
-    my $expect_flags = $opts->{flags} || 0;
-
-    print $sock "gets $key\r\n";
-    my $response = <$sock>;
-    if ($response =~ /^END/) {
-        return "NOT_FOUND";
-    }
-    else
-    {
-        $response =~ /VALUE (.*) (\d+) (\d+) (\d+)/;
-        my $flags = $2;
-        my $len = $3;
-        my $identifier = $4;
-        read $sock, $val , $len;
-        # get the END
-        $_ = <$sock>;
-        $_ = <$sock>;
-
-        return ($identifier,$val);
-    }
-
-}
-sub mem_gets_is {
-    # works on single-line values only.  no newlines in value.
-    my ($sock_opts, $identifier, $key, $val, $msg) = @_;
-    my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {};
-    my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts;
-
-    my $expect_flags = $opts->{flags} || 0;
-    my $dval = defined $val ? "'$val'" : "<undef>";
-    $msg ||= "$key == $dval";
-
-    print $sock "gets $key\r\n";
-    if (! defined $val) {
-        my $line = scalar <$sock>;
-        if ($line =~ /^VALUE/) {
-            $line .= scalar(<$sock>) . scalar(<$sock>);
-        }
-        Test::More::is($line, "END\r\n", $msg);
-    } else {
-        my $len = length($val);
-        my $body = scalar(<$sock>);
-        my $expected = "VALUE $key $expect_flags $len $identifier\r\n$val\r\nEND\r\n";
-        if (!$body || $body =~ /^END/) {
-            Test::More::is($body, $expected, $msg);
-            return;
-        }
-        $body .= scalar(<$sock>) . scalar(<$sock>);
-        Test::More::is($body, $expected, $msg);
-    }
-}
-
-sub free_port {
-    my $type = shift || "tcp";
-    my $sock;
-    my $port;
-    while (!$sock) {
-        $port = int(rand(20000)) + 30000;
-        $sock = IO::Socket::INET->new(LocalAddr => '127.0.0.1',
-                                      LocalPort => $port,
-                                      Proto     => $type,
-                                      ReuseAddr => 1);
-    }
-    return $port;
-}
-
-sub supports_udp {
-    my $output = `$builddir/memcached-debug -h`;
-    return 0 if $output =~ /^memcached 1\.1\./;
-    return 1;
-}
-
-sub new_memcached {
-    my ($args, $passed_port) = @_;
-    my $port = $passed_port || free_port();
-    my $host = '127.0.0.1';
-
-    if ($ENV{T_MEMD_USE_DAEMON}) {
-        my ($host, $port) = ($ENV{T_MEMD_USE_DAEMON} =~ m/^([^:]+):(\d+)$/);
-        my $conn = IO::Socket::INET->new(PeerAddr => "$host:$port");
-        if ($conn) {
-            return Memcached::Handle->new(conn => $conn,
-                                          host => $host,
-                                          port => $port);
-        }
-        croak("Failed to connect to specified memcached server.") unless $conn;
-    }
-
-    my $udpport = free_port("udp");
-    $args .= " -p $port";
-    if (supports_udp()) {
-        $args .= " -U $udpport";
-    }
-    if ($< == 0) {
-        $args .= " -u root";
-    }
-    my $childpid = fork();
-
-    my $exe = "$builddir/memcached-debug";
-    croak("memcached binary doesn't exist.  Haven't run 'make' ?\n") unless -e $exe;
-    croak("memcached binary not executable\n") unless -x _;
-
-    unless ($childpid) {
-        exec "$builddir/timedrun 600 $exe $args";
-        exit; # never gets here.
-    }
-
-    # unix domain sockets
-    if ($args =~ /-s (\S+)/) {
-        sleep 1;
-        my $filename = $1;
-        my $conn = IO::Socket::UNIX->new(Peer => $filename) ||
-            croak("Failed to connect to unix domain socket: $! '$filename'");
-
-        return Memcached::Handle->new(pid  => $childpid,
-                                      conn => $conn,
-                                      domainsocket => $filename,
-                                      host => $host,
-                                      port => $port);
-    }
-
-    # try to connect / find open port, only if we're not using unix domain
-    # sockets
-
-    for (1..20) {
-        my $conn = IO::Socket::INET->new(PeerAddr => "127.0.0.1:$port");
-        if ($conn) {
-            return Memcached::Handle->new(pid  => $childpid,
-                                          conn => $conn,
-                                          udpport => $udpport,
-                                          host => $host,
-                                          port => $port);
-        }
-        select undef, undef, undef, 0.10;
-    }
-    croak("Failed to startup/connect to memcached server.");
-}
-
-############################################################################
-package Memcached::Handle;
-sub new {
-    my ($class, %params) = @_;
-    return bless \%params, $class;
-}
-
-sub DESTROY {
-    my $self = shift;
-    kill 2, $self->{pid} if $self->{pid};
-}
-
-sub stop {
-    my $self = shift;
-    kill 15, $self->{pid};
-}
-
-sub host { $_[0]{host} }
-sub port { $_[0]{port} }
-sub udpport { $_[0]{udpport} }
-
-sub sock {
-    my $self = shift;
-
-    if ($self->{conn} && ($self->{domainsocket} || getpeername($self->{conn}))) {
-        return $self->{conn};
-    }
-    return $self->new_sock;
-}
-
-sub new_sock {
-    my $self = shift;
-    if ($self->{domainsocket}) {
-        return IO::Socket::UNIX->new(Peer => $self->{domainsocket});
-    } else {
-        return IO::Socket::INET->new(PeerAddr => "$self->{host}:$self->{port}");
-    }
-}
-
-sub new_udp_sock {
-    my $self = shift;
-    return IO::Socket::INET->new(PeerAddr => '127.0.0.1',
-                                 PeerPort => $self->{udpport},
-                                 Proto    => 'udp',
-                                 LocalAddr => '127.0.0.1',
-                                 LocalPort => MemcachedTest::free_port('udp'),
-        );
-
-}
-
-1;
diff --git a/third_party/memcached/t/multiversioning.t b/third_party/memcached/t/multiversioning.t
deleted file mode 100755
index df9eab48fd6fb6d4663d07cc85e3370f9667cdb1..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/multiversioning.t
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 13;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-my $server = new_memcached();
-my $sock  = $server->sock;
-my $sock2 = $server->new_sock;
-
-ok($sock != $sock2, "have two different connections open");
-
-# set large value
-my $size   = 256 * 1024;  # 256 kB
-my $bigval = "0123456789abcdef" x ($size / 16);
-$bigval =~ s/^0/\[/; $bigval =~ s/f$/\]/;
-my $bigval2 = uc($bigval);
-
-print $sock "set big 0 0 $size\r\n$bigval\r\n";
-is(scalar <$sock>, "STORED\r\n", "stored foo");
-mem_get_is($sock, "big", $bigval, "big value got correctly");
-
-print $sock "get big\r\n";
-my $buf;
-is(read($sock, $buf, $size / 2), $size / 2, "read half the answer back");
-like($buf, qr/VALUE big/, "buf has big value header in it");
-like($buf, qr/abcdef/, "buf has some data in it");
-unlike($buf, qr/abcde\]/, "buf doesn't yet close");
-
-# sock2 interrupts (maybe sock1 is slow) and deletes stuff:
-print $sock2 "delete big\r\n";
-is(scalar <$sock2>, "DELETED\r\n", "deleted big from sock2 while sock1's still reading it");
-mem_get_is($sock2, "big", undef, "nothing from sock2 now.  gone from namespace.");
-print $sock2 "set big 0 0 $size\r\n$bigval2\r\n";
-is(scalar <$sock2>, "STORED\r\n", "stored big w/ val2");
-mem_get_is($sock2, "big", $bigval2, "big value2 got correctly");
-
-# sock1 resumes reading...
-$buf .= <$sock>;
-$buf .= <$sock>;
-like($buf, qr/abcde\]/, "buf now closes");
-
-# and if sock1 reads again, it's the uppercase version:
-mem_get_is($sock, "big", $bigval2, "big value2 got correctly from sock1");
diff --git a/third_party/memcached/t/noreply.t b/third_party/memcached/t/noreply.t
deleted file mode 100644
index a57a4afcd742b1cf1f1e784cfad1927db6111ad7..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/noreply.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 9;
-use FindBin qw($Bin);
-use lib "$Bin/lib";
-use MemcachedTest;
-
-
-my $server = new_memcached();
-my $sock = $server->sock;
-
-# Test that commands can take 'noreply' parameter.
-print $sock "flush_all noreply\r\n";
-print $sock "flush_all 0 noreply\r\n";
-
-print $sock "add noreply:foo 0 0 1 noreply\r\n1\r\n";
-mem_get_is($sock, "noreply:foo", "1");
-
-print $sock "set noreply:foo 0 0 1 noreply\r\n2\r\n";
-mem_get_is($sock, "noreply:foo", "2");
-
-print $sock "replace noreply:foo 0 0 1 noreply\r\n3\r\n";
-mem_get_is($sock, "noreply:foo", "3");
-
-print $sock "append noreply:foo 0 0 1 noreply\r\n4\r\n";
-mem_get_is($sock, "noreply:foo", "34");
-
-print $sock "prepend noreply:foo 0 0 1 noreply\r\n5\r\n";
-my @result = mem_gets($sock, "noreply:foo");
-ok($result[1] eq "534");
-
-print $sock "cas noreply:foo 0 0 1 $result[0] noreply\r\n6\r\n";
-mem_get_is($sock, "noreply:foo", "6");
-
-print $sock "incr noreply:foo 3 noreply\r\n";
-mem_get_is($sock, "noreply:foo", "9");
-
-print $sock "decr noreply:foo 2 noreply\r\n";
-mem_get_is($sock, "noreply:foo", "7");
-
-print $sock "delete noreply:foo noreply\r\n";
-mem_get_is($sock, "noreply:foo");
-
diff --git a/third_party/memcached/t/stress-memcached.pl b/third_party/memcached/t/stress-memcached.pl
deleted file mode 100755
index aeacbc2c38503f47fda60c0742973467c4caf1df..0000000000000000000000000000000000000000
--- a/third_party/memcached/t/stress-memcached.pl
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/perl
-#
-
-use strict;
-use lib '../../api/perl/lib';
-use Cache::Memcached;
-use Time::HiRes qw(time);
-
-unless (@ARGV == 2) {
-    die "Usage: stress-memcached.pl ip:port threads\n";
-}
-
-my $host = shift;
-my $threads = shift;
-
-my $memc = new Cache::Memcached;
-$memc->set_servers([$host]);
-
-unless ($memc->set("foo", "bar") &&
-        $memc->get("foo") eq "bar") {
-    die "memcached not running at $host ?\n";
-}
-$memc->disconnect_all();
-
-
-my $running = 0;
-while (1) {
-    if ($running < $threads) {
-        my $cpid = fork();
-        if ($cpid) {
-            $running++;
-            #print "Launched $cpid.  Running $running threads.\n";
-        } else {
-            stress();
-            exit 0;
-        }
-    } else {
-        wait();
-        $running--;
-    }
-}
-
-sub stress {
-    undef $memc;
-    $memc = new Cache::Memcached;
-    $memc->set_servers([$host]);
-
-    my ($t1, $t2);
-    my $start = sub { $t1 = time(); };
-    my $stop = sub {
-        my $op = shift;
-        $t2 = time();
-        my $td = sprintf("%0.3f", $t2 - $t1);
-        if ($td > 0.25) { print "Took $td seconds for: $op\n"; }
-    };
-
-    my $max = rand(50);
-    my $sets = 0;
-
-    for (my $i = 0; $i < $max; $i++) {
-        my $key = key($i);
-        my $set = $memc->set($key, $key);
-        $sets++ if $set;
-    }
-
-    for (1..int(rand(500))) {
-        my $rand = int(rand($max));
-        my $key = key($rand);
-        my $meth = int(rand(3));
-        my $exp = int(rand(3));
-        undef $exp unless $exp;
-        $start->();
-        if ($meth == 0) {
-            $memc->add($key, $key, $exp);
-            $stop->("add");
-        } elsif ($meth == 1) {
-            $memc->delete($key);
-            $stop->("delete");
-        } else {
-            $memc->set($key, $key, $exp);
-            $stop->("set");
-        }
-        $rand = int(rand($max));
-        $key = key($rand);
-        $start->();
-        my $v = $memc->get($key);
-        $stop->("get");
-        if ($v && $v ne $key) { die "Bogus: $v for key $rand\n"; }
-    }
-
-    $start->();
-    my $multi = $memc->get_multi(map { key(int(rand($max))) } (1..$max));
-    $stop->("get_multi");
-}
-
-sub key {
-    my $n = shift;
-    $_ = sprintf("%04d", $n);
-    if ($n % 2) { $_ .= "a"x20; }
-    $_;
-}