diff --git a/lib/cocoa/src/Thrift.h b/lib/cocoa/src/Thrift.h
index 6fc594a..5c72a01 100644
--- a/lib/cocoa/src/Thrift.h
+++ b/lib/cocoa/src/Thrift.h
@@ -17,4 +17,4 @@
  * under the License.
  */
 
-#define ThriftVersion @"1.0.0-dev"
+#define ThriftVersion @"0.10.0"
diff --git a/lib/cpp/src/thrift/windows/config.h b/lib/cpp/src/thrift/windows/config.h
index 674c260..049e249 100644
--- a/lib/cpp/src/thrift/windows/config.h
+++ b/lib/cpp/src/thrift/windows/config.h
@@ -65,7 +65,7 @@
 
 #pragma warning(disable : 4996) // Deprecated posix name.
 
-#define VERSION "1.0.0-dev"
+#define VERSION "0.10.0"
 #define HAVE_GETTIMEOFDAY 1
 #define HAVE_SYS_STAT_H 1
 
diff --git a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs b/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
index 2e08e66..64cec97 100644
--- a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
+++ b/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
@@ -56,5 +56,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.0.*")]
-[assembly: AssemblyFileVersion("0.9.0.*")]
+[assembly: AssemblyVersion("0.10.0.*")]
+[assembly: AssemblyFileVersion("0.10.0.*")]
diff --git a/lib/csharp/src/Properties/AssemblyInfo.cs b/lib/csharp/src/Properties/AssemblyInfo.cs
index dcbe747..22d53dc 100644
--- a/lib/csharp/src/Properties/AssemblyInfo.cs
+++ b/lib/csharp/src/Properties/AssemblyInfo.cs
@@ -51,5 +51,5 @@
 //
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.1")]
-[assembly: AssemblyFileVersion("1.0.0.1")]
+[assembly: AssemblyVersion("0.10.0.1")]
+[assembly: AssemblyFileVersion("0.10.0.1")]
diff --git a/lib/d/src/thrift/base.d b/lib/d/src/thrift/base.d
index 57aec18..1c963eb 100644
--- a/lib/d/src/thrift/base.d
+++ b/lib/d/src/thrift/base.d
@@ -50,7 +50,7 @@
 /// The Thrift version string, used for informative purposes.
 // Note: This is currently hardcoded, but will likely be filled in by the build
 // system in future versions.
-enum VERSION = "0.9.0 dev";
+enum VERSION = "0.10.0";
 
 /**
  * Functions used for logging inside Thrift.
diff --git a/lib/dart/pubspec.yaml b/lib/dart/pubspec.yaml
index f7aa876..782aa82 100644
--- a/lib/dart/pubspec.yaml
+++ b/lib/dart/pubspec.yaml
@@ -16,7 +16,7 @@
 # under the License.
 
 name: thrift
-version: 1.0.0-dev
+version: 0.10.0
 description: >
   A Dart library for Apache Thrift
 author: Apache Thrift Developers <dev@thrift.apache.org>
diff --git a/lib/delphi/src/Thrift.pas b/lib/delphi/src/Thrift.pas
index e969ebf..fe8f8d7 100644
--- a/lib/delphi/src/Thrift.pas
+++ b/lib/delphi/src/Thrift.pas
@@ -25,7 +25,7 @@
   SysUtils, Thrift.Protocol;
 
 const
-  Version = '1.0.0-dev';
+  Version = '0.10.0';
 
 type
   TApplicationExceptionSpecializedClass = class of TApplicationExceptionSpecialized;
diff --git a/lib/erl/src/thrift.app.src b/lib/erl/src/thrift.app.src
index 1a23f0d..75be900 100644
--- a/lib/erl/src/thrift.app.src
+++ b/lib/erl/src/thrift.app.src
@@ -22,7 +22,7 @@
   {description, "Thrift bindings"},
 
   % The version of the applicaton
-  {vsn, "1.0.0-dev"},
+  {vsn, "0.10.0"},
 
   % All modules used by the application.
   {modules, [
diff --git a/lib/haxe/haxelib.json b/lib/haxe/haxelib.json
index 9f31884..4c27917 100644
--- a/lib/haxe/haxelib.json
+++ b/lib/haxe/haxelib.json
@@ -4,7 +4,7 @@
 	"license": "Apache",
 	"tags": ["thrift", "rpc", "serialization", "cross", "framework"],
 	"description": "Haxe bindings for the Apache Thrift RPC and serialization framework",
-	"version": "1.0.0-alpha.160215",
+	"version": "0.10.0",
 	"releasenote": "Licensed under Apache License, Version 2.0. The Apache Thrift compiler needs to be installed separately.",
 	"contributors": ["Apache Software Foundation (ASF)"],
 	"dependencies": { },
diff --git a/lib/hs/Thrift.cabal b/lib/hs/Thrift.cabal
index f7520f3..a604307 100644
--- a/lib/hs/Thrift.cabal
+++ b/lib/hs/Thrift.cabal
@@ -18,7 +18,7 @@
 --
 
 Name:           thrift
-Version:        1.0.0-dev
+Version:        0.10.0
 Cabal-Version:  >= 1.8
 License:        OtherLicense
 Category:       Foreign
diff --git a/lib/java/build.properties b/lib/java/build.properties
index 96cf8d3..a3f2de5 100644
--- a/lib/java/build.properties
+++ b/lib/java/build.properties
@@ -1,8 +1,8 @@
-thrift.version=1.0.0
+thrift.version=0.10.0
 thrift.groupid=org.apache.thrift
 release=false
 
-# Jar Versions 
+# Jar Versions
 mvn.ant.task.version=2.1.3
 
 # Local Install paths
@@ -15,12 +15,12 @@
 mvn.ant.task.url=${mvn.repo}/org/apache/maven/maven-ant-tasks/${mvn.ant.task.version}
 mvn.ant.task.jar=maven-ant-tasks-${mvn.ant.task.version}.jar
 
-# Apache Maven publish 
+# Apache Maven publish
 license=http://www.apache.org/licenses/LICENSE-2.0.txt
 maven-repository-url=https://repository.apache.org/service/local/staging/deploy/maven2
 maven-repository-id=apache.releases.https
 
-# Jar Versions 
+# Jar Versions
 mvn.ant.task.version=2.1.3
 
 # Dependency versions
diff --git a/lib/js/package.json b/lib/js/package.json
index 4b693bb..9491970 100644
--- a/lib/js/package.json
+++ b/lib/js/package.json
@@ -1,6 +1,6 @@
 {
   "name": "thrift",
-  "version": "1.0.0",
+  "version": "0.10.0",
   "devDependencies": {
     "grunt": "^0.4.5",
     "grunt-cli": "^1.2.0",
diff --git a/lib/js/src/thrift.js b/lib/js/src/thrift.js
index 3ea57c8..41935c4 100644
--- a/lib/js/src/thrift.js
+++ b/lib/js/src/thrift.js
@@ -20,15 +20,15 @@
 /*jshint evil:true*/
 
 /**
- * The Thrift namespace houses the Apache Thrift JavaScript library 
- * elements providing JavaScript bindings for the Apache Thrift RPC 
- * system. End users will typically only directly make use of the 
- * Transport (TXHRTransport/TWebSocketTransport) and Protocol 
+ * The Thrift namespace houses the Apache Thrift JavaScript library
+ * elements providing JavaScript bindings for the Apache Thrift RPC
+ * system. End users will typically only directly make use of the
+ * Transport (TXHRTransport/TWebSocketTransport) and Protocol
  * (TJSONPRotocol/TBinaryProtocol) constructors.
- * 
- * Object methods beginning with a __ (e.g. __onOpen()) are internal 
+ *
+ * Object methods beginning with a __ (e.g. __onOpen()) are internal
  * and should not be called outside of the object's own methods.
- * 
+ *
  * This library creates one global object: Thrift
  * Code in this library must never create additional global identifiers,
  * all features must be scoped within the Thrift namespace.
@@ -46,7 +46,7 @@
      * @const {string} Version
      * @memberof Thrift
      */
-    Version: '1.0.0-dev',
+    Version: '0.10.0',
 
     /**
      * Thrift IDL type string to Id mapping.
@@ -55,7 +55,7 @@
      * @property {number}  VOID   - No value (only legal for return types).
      * @property {number}  BOOL   - True/False integer.
      * @property {number}  BYTE   - Signed 8 bit integer.
-     * @property {number}  I08    - Signed 8 bit integer.     
+     * @property {number}  I08    - Signed 8 bit integer.
      * @property {number}  DOUBLE - 64 bit IEEE 854 floating point.
      * @property {number}  I16    - Signed 16 bit integer.
      * @property {number}  I32    - Signed 32 bit integer.
@@ -298,8 +298,8 @@
  * for backward compatibility.
  * @constructor
  * @param {string} [url] - The URL to connect to.
- * @classdesc The Apache Thrift Transport layer performs byte level I/O 
- * between RPC clients and servers. The JavaScript TXHRTransport object 
+ * @classdesc The Apache Thrift Transport layer performs byte level I/O
+ * between RPC clients and servers. The JavaScript TXHRTransport object
  * uses Http[s]/XHR. Target servers must implement the http[s] transport
  * (see: node.js example server_http.js).
  * @example
@@ -329,12 +329,12 @@
     },
 
     /**
-     * Sends the current XRH request if the transport was created with a URL 
+     * Sends the current XRH request if the transport was created with a URL
      * and the async parameter is false. If the transport was not created with
-     * a URL, or the async parameter is True and no callback is provided, or 
+     * a URL, or the async parameter is True and no callback is provided, or
      * the URL is an empty string, the current send buffer is returned.
      * @param {object} async - If true the current send buffer is returned.
-     * @param {object} callback - Optional async completion callback 
+     * @param {object} callback - Optional async completion callback
      * @returns {undefined|string} Nothing or the current send buffer.
      * @throws {string} If XHR fails.
      */
@@ -353,9 +353,9 @@
         if (callback) {
             //Ignore XHR callbacks until the data arrives, then call the
             //  client's callback
-            xreq.onreadystatechange = 
+            xreq.onreadystatechange =
               (function() {
-                var clientCallback = callback;    
+                var clientCallback = callback;
                 return function() {
                   if (this.readyState == 4 && this.status == 200) {
                     self.setRecvBuffer(this.responseText);
@@ -459,19 +459,19 @@
      * Returns true if the transport is open, XHR always returns true.
      * @readonly
      * @returns {boolean} Always True.
-     */    
+     */
     isOpen: function() {
         return true;
     },
 
     /**
      * Opens the transport connection, with XHR this is a nop.
-     */    
+     */
     open: function() {},
 
     /**
      * Closes the transport connection, with XHR this is a nop.
-     */    
+     */
     close: function() {},
 
     /**
@@ -511,7 +511,7 @@
     /**
      * Sets the send buffer to buf.
      * @param {string} buf - The buffer to send.
-     */    
+     */
     write: function(buf) {
         this.send_buf = buf;
     },
@@ -520,7 +520,7 @@
      * Returns the send buffer.
      * @readonly
      * @returns {string} The send buffer.
-     */ 
+     */
     getSendBuffer: function() {
         return this.send_buf;
     }
@@ -532,8 +532,8 @@
  * Constructor Function for the WebSocket transport.
  * @constructor
  * @param {string} [url] - The URL to connect to.
- * @classdesc The Apache Thrift Transport layer performs byte level I/O 
- * between RPC clients and servers. The JavaScript TWebSocketTransport object 
+ * @classdesc The Apache Thrift Transport layer performs byte level I/O
+ * between RPC clients and servers. The JavaScript TWebSocketTransport object
  * uses the WebSocket protocol. Target servers must implement WebSocket.
  * (see: node.js example server_http.js).
  * @example
@@ -556,20 +556,20 @@
     },
 
     /**
-     * Sends the current WS request and registers callback. The async 
-     * parameter is ignored (WS flush is always async) and the callback 
+     * Sends the current WS request and registers callback. The async
+     * parameter is ignored (WS flush is always async) and the callback
      * function parameter is required.
      * @param {object} async - Ignored.
      * @param {object} callback - The client completion callback.
-     * @returns {undefined|string} Nothing (undefined) 
+     * @returns {undefined|string} Nothing (undefined)
      */
     flush: function(async, callback) {
       var self = this;
       if (this.isOpen()) {
         //Send data and register a callback to invoke the client callback
-        this.socket.send(this.send_buf); 
+        this.socket.send(this.send_buf);
         this.callbacks.push((function() {
-          var clientCallback = callback;    
+          var clientCallback = callback;
           return function(msg) {
             self.setRecvBuffer(msg);
             clientCallback();
@@ -584,15 +584,15 @@
       }
     },
 
-    __onOpen: function() { 
+    __onOpen: function() {
        var self = this;
        if (this.send_pending.length > 0) {
-          //If the user made calls before the connection was fully 
+          //If the user made calls before the connection was fully
           //open, send them now
           this.send_pending.forEach(function(elem) {
              this.socket.send(elem.buf);
              this.callbacks.push((function() {
-               var clientCallback = elem.cb;    
+               var clientCallback = elem.cb;
                return function(msg) {
                   self.setRecvBuffer(msg);
                   clientCallback();
@@ -602,18 +602,18 @@
           this.send_pending = [];
        }
     },
-    
-    __onClose: function(evt) { 
+
+    __onClose: function(evt) {
       this.__reset(this.url);
     },
-     
+
     __onMessage: function(evt) {
       if (this.callbacks.length) {
         this.callbacks.shift()(evt.data);
       }
     },
-     
-    __onError: function(evt) { 
+
+    __onError: function(evt) {
       console.log("Thrift WebSocket Error: " + evt.toString());
       this.socket.close();
     },
@@ -632,15 +632,15 @@
     /**
      * Returns true if the transport is open
      * @readonly
-     * @returns {boolean} 
-     */    
+     * @returns {boolean}
+     */
     isOpen: function() {
         return this.socket && this.socket.readyState == this.socket.OPEN;
     },
 
     /**
      * Opens the transport connection
-     */    
+     */
     open: function() {
       //If OPEN/CONNECTING/CLOSING ignore additional opens
       if (this.socket && this.socket.readyState != this.socket.CLOSED) {
@@ -648,15 +648,15 @@
       }
       //If there is no socket or the socket is closed:
       this.socket = new WebSocket(this.url);
-      this.socket.onopen = this.__onOpen.bind(this); 
-      this.socket.onmessage = this.__onMessage.bind(this); 
-      this.socket.onerror = this.__onError.bind(this); 
-      this.socket.onclose = this.__onClose.bind(this); 
+      this.socket.onopen = this.__onOpen.bind(this);
+      this.socket.onmessage = this.__onMessage.bind(this);
+      this.socket.onerror = this.__onError.bind(this);
+      this.socket.onclose = this.__onClose.bind(this);
     },
 
     /**
      * Closes the transport connection
-     */    
+     */
     close: function() {
       this.socket.close();
     },
@@ -698,7 +698,7 @@
     /**
      * Sets the send buffer to buf.
      * @param {string} buf - The buffer to send.
-     */    
+     */
     write: function(buf) {
         this.send_buf = buf;
     },
@@ -707,7 +707,7 @@
      * Returns the send buffer.
      * @readonly
      * @returns {string} The send buffer.
-     */ 
+     */
     getSendBuffer: function() {
         return this.send_buf;
     }
@@ -718,8 +718,8 @@
  * Initializes a Thrift JSON protocol instance.
  * @constructor
  * @param {Thrift.Transport} transport - The transport to serialize to/from.
- * @classdesc Apache Thrift Protocols perform serialization which enables cross 
- * language RPC. The Protocol type is the JavaScript browser implementation 
+ * @classdesc Apache Thrift Protocols perform serialization which enables cross
+ * language RPC. The Protocol type is the JavaScript browser implementation
  * of the Apache Thrift TJSONProtocol.
  * @example
  *     var protocol  = new Thrift.Protocol(transport);
@@ -779,7 +779,7 @@
      * Returns the underlying transport.
      * @readonly
      * @returns {Thrift.Transport} The underlying transport.
-     */ 
+     */
     getTransport: function() {
         return this.transport;
     },
@@ -1021,7 +1021,7 @@
                 if (ch === '\"') {
                     escapedString += '\\\"'; // write out as: \"
                 } else if (ch === '\\') {    // a single backslash
-                    escapedString += '\\\\'; // write out as double backslash 
+                    escapedString += '\\\\'; // write out as double backslash
                 } else if (ch === '\b') {    // a single backspace: invisible
                     escapedString += '\\b';  // write out as: \b"
                 } else if (ch === '\f') {    // a single formfeed: invisible
@@ -1063,8 +1063,8 @@
        @property {Thrift.MessageType} mtype - The type of message call.
        @property {number} rseqid - The sequence number of the message (0 in Thrift RPC).
      */
-    /** 
-     * Deserializes the beginning of a message. 
+    /**
+     * Deserializes the beginning of a message.
      * @returns {AnonReadMessageBeginReturn}
      */
     readMessageBegin: function() {
@@ -1101,11 +1101,11 @@
     readMessageEnd: function() {
     },
 
-    /** 
-     * Deserializes the beginning of a struct. 
+    /**
+     * Deserializes the beginning of a struct.
      * @param {string} [name] - The name of the struct (ignored)
      * @returns {object} - An object with an empty string fname property
-     */    
+     */
     readStructBegin: function(name) {
         var r = {};
         r.fname = '';
@@ -1132,8 +1132,8 @@
        @property {Thrift.Type} ftype - The data type of the field.
        @property {number} fid - The unique identifier of the field.
      */
-    /** 
-     * Deserializes the beginning of a field. 
+    /**
+     * Deserializes the beginning of a field.
      * @returns {AnonReadFieldBeginReturn}
      */
     readFieldBegin: function() {
@@ -1201,8 +1201,8 @@
        @property {Thrift.Type} vtype - The data type of the value.
        @property {number} size - The number of elements in the map.
      */
-    /** 
-     * Deserializes the beginning of a map. 
+    /**
+     * Deserializes the beginning of a map.
      * @returns {AnonReadMapBeginReturn}
      */
     readMapBegin: function() {
@@ -1237,8 +1237,8 @@
        @property {Thrift.Type} etype - The data type of the element.
        @property {number} size - The number of elements in the collection.
      */
-    /** 
-     * Deserializes the beginning of a list. 
+    /**
+     * Deserializes the beginning of a list.
      * @returns {AnonReadColBeginReturn}
      */
     readListBegin: function() {
@@ -1259,8 +1259,8 @@
         this.readFieldEnd();
     },
 
-    /** 
-     * Deserializes the beginning of a set. 
+    /**
+     * Deserializes the beginning of a set.
      * @returns {AnonReadColBeginReturn}
      */
     readSetBegin: function(elemType, size) {
@@ -1272,8 +1272,8 @@
         return this.readListEnd();
     },
 
-    /** Returns an object with a value property set to 
-     *  False unless the next number in the protocol buffer 
+    /** Returns an object with a value property set to
+     *  False unless the next number in the protocol buffer
      *  is 1, in which case the value property is True */
     readBool: function() {
         var r = this.readI32();
@@ -1287,19 +1287,19 @@
         return r;
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readByte: function() {
         return this.readI32();
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readI16: function() {
         return this.readI32();
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readI32: function(f) {
         if (f === undefined) {
@@ -1333,26 +1333,26 @@
         return r;
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readI64: function() {
         return this.readI32();
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readDouble: function() {
         return this.readI32();
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readString: function() {
         var r = this.readI32();
         return r;
     },
 
-    /** Returns the an object with a value property set to the 
+    /** Returns the an object with a value property set to the
         next value found in the protocol buffer */
     readBinary: function() {
         var r = this.readI32();
@@ -1360,7 +1360,7 @@
         return r;
     },
 
-    /** 
+    /**
      * Method to arbitrarily skip over data */
     skip: function(type) {
         var ret, i;
diff --git a/lib/lua/THttpTransport.lua b/lib/lua/THttpTransport.lua
index 5bbfece..19b7705 100644
--- a/lib/lua/THttpTransport.lua
+++ b/lib/lua/THttpTransport.lua
@@ -25,7 +25,7 @@
   wBuf = '',
   rBuf = '',
   CRLF = '\r\n',
-  VERSION = '1.0.0',
+  VERSION = '0.10.0',
   isServer = true
 }
 
diff --git a/lib/lua/Thrift.lua b/lib/lua/Thrift.lua
index a9a9078..3eddb64 100644
--- a/lib/lua/Thrift.lua
+++ b/lib/lua/Thrift.lua
@@ -48,7 +48,7 @@
   return count
 end
 
-version = 1.0
+version = 0.10
 
 TType = {
   STOP   = 0,
diff --git a/lib/ocaml/_oasis b/lib/ocaml/_oasis
index 4dd95e5..95536f0 100644
--- a/lib/ocaml/_oasis
+++ b/lib/ocaml/_oasis
@@ -1,5 +1,5 @@
 Name: libthrift-ocaml
-Version: 1.0
+Version: 0.10.0
 OASISFormat: 0.3
 Synopsis: OCaml bindings for the Apache Thrift RPC system
 Authors: Apache Thrift Developers <dev@thrift.apache.org>
diff --git a/lib/perl/lib/Thrift.pm b/lib/perl/lib/Thrift.pm
index bd7b65a..152d223 100644
--- a/lib/perl/lib/Thrift.pm
+++ b/lib/perl/lib/Thrift.pm
@@ -19,7 +19,7 @@
 
 package Thrift;
 
-our $VERSION = '1.0.0-dev';
+our $VERSION = '0.10.0';
 
 require 5.6.0;
 use strict;
diff --git a/lib/py/setup.py b/lib/py/setup.py
index 99b7172..1fdfe72 100644
--- a/lib/py/setup.py
+++ b/lib/py/setup.py
@@ -87,7 +87,7 @@
     twisted_deps = ['twisted']
 
     setup(name='thrift',
-          version='1.0.0-dev',
+          version='0.10.0',
           description='Python bindings for the Apache Thrift RPC system',
           author='Thrift Developers',
           author_email='dev@thrift.apache.org',
diff --git a/lib/rb/thrift.gemspec b/lib/rb/thrift.gemspec
index 166a93f..0ceebd2 100644
--- a/lib/rb/thrift.gemspec
+++ b/lib/rb/thrift.gemspec
@@ -3,7 +3,7 @@
 
 Gem::Specification.new do |s|
   s.name        = 'thrift'
-  s.version     = '1.0.0.0'
+  s.version     = '0.10.0.0'
   s.authors     = ['Thrift Developers']
   s.email       = ['dev@thrift.apache.org']
   s.homepage    = 'http://thrift.apache.org'
diff --git a/lib/st/package.xml b/lib/st/package.xml
index 72194fc..8a7fe17 100644
--- a/lib/st/package.xml
+++ b/lib/st/package.xml
@@ -7,9 +7,9 @@
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License. You may obtain a copy of the License at
- 
+
  http://www.apache.org/licenses/LICENSE-2.0
- 
+
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -17,7 +17,7 @@
  specific language governing permissions and limitations
  under the License.
  -->
-<!-- Apache Thrift Smalltalk library version 1.0 -->
+<!-- Apache Thrift Smalltalk library version 0.10.0 -->
 <package>
   <name>libthrift-st</name>
   <file>thrift.st</file>
