You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/11/21 02:47:45 UTC

[2/2] git commit: [flex-sdk] [refs/heads/release4.15.0] - update approval script with binary package checks

update approval script with binary package checks


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/b36f9d6f
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/b36f9d6f
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/b36f9d6f

Branch: refs/heads/release4.15.0
Commit: b36f9d6f2cd9e74c85ce7a0a5bff7ff7aecaa562
Parents: 8e696c7
Author: Alex Harui <ah...@apache.org>
Authored: Fri Nov 20 17:46:51 2015 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Nov 20 17:46:51 2015 -0800

----------------------------------------------------------------------
 ApproveSDK.xml | 1041 +++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 926 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/b36f9d6f/ApproveSDK.xml
----------------------------------------------------------------------
diff --git a/ApproveSDK.xml b/ApproveSDK.xml
index 1048fba..77aba4a 100644
--- a/ApproveSDK.xml
+++ b/ApproveSDK.xml
@@ -52,12 +52,13 @@
     </condition>
 	<property name="package.suffix" value="tar.gz" />
 	
-	<property name="rat.report" value="${basedir}/rat-report.txt"/>
+    <property name="src.rat.report" value="${basedir}/rat-report-src.txt"/>
+    <property name="bin.rat.report" value="${basedir}/rat-report-bin.txt"/>
 	<property name="apache.rat.jar" value="apache-rat-0.8.jar" />
 	<property name="apache.rat.tasks.jar" value="apache-rat-tasks-0.8.jar" />
 	<property name="apache.rat.url" value="http://people.apache.org/~aharui/rat" />
 	   
-    <property file="${basedir}/approvefalcon.properties"/>
+    <property file="${basedir}/approvesdk.properties"/>
     
 	<property name="mac.text.display" value="cat" />
 	<property name="win.text.display" value="type" />
@@ -108,13 +109,24 @@
     <fail message="The release version is not set.  Specify -Drelease.version=&lt;release version (e.g. 3.1, 3.2, etc)&gt;"
     unless="release.version"/>
 
-
-    <condition property="package.url.path" value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out">
-        <isset property="nightly" />
+    <condition property="package.url.path"
+        value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out">
+        <not>
+            <isset property="rc" />
+        </not>
     </condition>
-    
+    <condition property="bin.package.url.path"
+        value="${package.url.path}">
+        <not>
+            <isset property="rc" />
+        </not>
+    </condition>
+
 	<property name="package.url.path" value="https://dist.apache.org/repos/dist/dev/flex/sdk/${release.version}/rc${rc}" />
-	<property name="package.url.name" value="apache-flex-sdk-${release.version}-src" />
+    <property name="src.package.url.path" value="${package.url.path}" />
+    <property name="bin.package.url.path" value="${package.url.path}/binaries" />
+    <property name="src.package.url.name" value="apache-flex-sdk-${release.version}-src" />
+    <property name="bin.package.url.name" value="apache-flex-sdk-${release.version}-bin" />
 	
     <condition property="zip.package">
         <equals arg1="zip" arg2="${package.suffix}" />
@@ -171,10 +183,10 @@
         <echo>Testing nightly build of release ${release.version}</echo>
     </target>
     
-    <target name="main" depends="install-rat,echo-mode,download,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps">
+    <target name="main" depends="write-out-jars-list,install-rat,download,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps">
     </target>
     
-    <target name="main-no-download" depends="install-rat,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps">
+    <target name="main-no-download" depends="write-out-jars-list,install-rat,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps">
     </target>
 	
     <target name="test" >
@@ -182,6 +194,16 @@
 		<replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/>
     </target>
 	
+    <target name="write-out-jars-list" >
+        <delete file="jars.txt" />
+        <!-- this is a comma-delimited, no spaces, no-line-breaks list used to decide which jars
+         to skip in the rat-check of the binaries and which jars to examine before approval -->
+        <property name="jars-list" value="ant/lib/flexTasks.jar,lib/asc.jar,lib/asdoc.jar,lib/batik-all-flex.jar,lib/compc.jar,lib/copylocale.jar,lib/digest.jar,lib/fcsh.jar,lib/fdb.jar,lib/flex-compiler-oem.jar,lib/flex-messaging-common.jar,lib/flex-tool-api.jar,lib/fxgutils.jar,lib/mxmlc.jar,lib/mxmlc_da.jar,lib/mxmlc_de.jar,lib/mxmlc_es.jar,lib/mxmlc_fi.jar,lib/mxmlc_fr.jar,lib/mxmlc_it.jar,lib/mxmlc_ja.jar,lib/mxmlc_ko.jar,lib/mxmlc_nb.jar,lib/mxmlc_nl.jar,lib/mxmlc_pt.jar,lib/mxmlc_ru.jar,lib/mxmlc_sv.jar,lib/mxmlc_zh_CN.jar,lib/mxmlc_zh_TW.jar,lib/optimizer.jar,lib/swcdepends.jar,lib/swfdump.jar,lib/swfutils.jar,lib/velocity-dep-1.4-flex.jar"/>
+        <echo file="${basedir}/jars.txt" message="${jars-list}"/>
+        <echo file="${basedir}/jarexcludes.txt" message="${jars-list}"/>
+        <replaceregexp file="${basedir}/jarexcludes.txt" match="," flags="g" replace="${line.separator}" />
+    </target>
+    
 	<target name="display-text" >
 		<antcall target="display-text-mac" />
 		<antcall target="display-text-win" />
@@ -195,60 +217,89 @@
 	</target>
 	
     <target name="download" description="download the release package">
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}"
-            dest="${basedir}/${package.url.name}.${package.suffix}" />
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}.md5"
-            dest="${basedir}/${package.url.name}.${package.suffix}.md5" />
-        <antcall target="downloadasc" />
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}" />
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.md5"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}.md5" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.md5"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}.md5" />
+        <antcall target="asc_get" />
     </target>
-    <target name="downloadasc" if="rc" >
-        <get src="${package.url.path}/${package.url.name}.${package.suffix}.asc"
-            dest="${basedir}/${package.url.name}.${package.suffix}.asc" />
+    
+    <target name="asc_get" if="rc" >
+        <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.asc"
+        dest="${basedir}/${src.package.url.name}.${package.suffix}.asc" />
+        <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.asc"
+        dest="${basedir}/${bin.package.url.name}.${package.suffix}.asc" />
     </target>
     
     <target name="check-sigs" description="check md5 and gpg sigs">
-		<replace file="${basedir}/${package.url.name}.${package.suffix}.md5"
-			token=" " />
-		<checksum file="${basedir}/${package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="md5.ok" />
-        <condition property="MD5Invalid">
-			<not>
-				<equals arg1="${md5.ok}" arg2="true" />
-			</not>
+        <replace file="${basedir}/${src.package.url.name}.${package.suffix}.md5"
+        token=" " />
+        <checksum file="${basedir}/${src.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="src.md5.ok" />
+        <condition property="SourceMD5Invalid">
+            <not>
+                <equals arg1="${src.md5.ok}" arg2="true" />
+            </not>
+        </condition>
+        <fail message="Source Package MD5 checksum did not match" if="SourceMD5Invalid" />
+        <replace file="${basedir}/${bin.package.url.name}.${package.suffix}.md5"
+        token=" " />
+        <checksum file="${basedir}/${bin.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="bin.md5.ok" />
+        <condition property="BinaryMD5Invalid">
+            <not>
+                <equals arg1="${bin.md5.ok}" arg2="true" />
+            </not>
         </condition>
-        <fail message="MD5 checksum did not match" if="MD5Invalid" />
-        <antcall target="checkasc" />
+        <fail message="Binary Package MD5 checksum did not match" if="BinaryMD5Invalid" />
+        <echo>rc is ${rc}</echo>
+        <antcall target="gpg_check" />
     </target>
-    <target name="checkasc" if="rc" >
-		<exec executable="gpg" failonerror="true">
-			<arg value="--verify" />
-			<arg value="${basedir}/${package.url.name}.${package.suffix}.asc" />
-			<arg value="${basedir}/${package.url.name}.${package.suffix}" />
-		</exec>
+    
+    <target name="gpg_check" if="rc">
+        <exec executable="gpg" failonerror="true">
+            <arg value="--verify" />
+            <arg value="${basedir}/${src.package.url.name}.${package.suffix}.asc" />
+            <arg value="${basedir}/${src.package.url.name}.${package.suffix}" />
+        </exec>
+        <exec executable="gpg" failonerror="true">
+            <arg value="--verify" />
+            <arg value="${basedir}/${bin.package.url.name}.${package.suffix}.asc" />
+            <arg value="${basedir}/${bin.package.url.name}.${package.suffix}" />
+        </exec>
     </target>
+    
 
     <target name="uncompress" depends="pre-clean, untar-file, unzip-file" />
 
     <target name="pre-clean" description="remove old uncompressed package" >
-		<delete dir="${basedir}/${package.url.name}" failonerror="false" />
-	</target>
-	
+        <delete dir="${basedir}/${src.package.url.name}" failonerror="false" />
+        <delete dir="${basedir}/${bin.package.url.name}" failonerror="false" />
+    </target>
+
     <target name="untar-file" unless="zip.package" description="Untars zipFile">
-        <untar src="${basedir}/${package.url.name}.${package.suffix}"
-                dest="${basedir}" compression="gzip"/>
+        <untar src="${basedir}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}" compression="gzip"/>
+        <untar src="${basedir}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}" compression="gzip"/>
     </target>
 
     <target name="unzip-file" if="zip.package" description="Unzips zipFile">
-        <unzip src="${basedir}/${package.url.name}.${package.suffix}"
-                dest="${basedir}/${package.url.name}"/>
+        <unzip src="${basedir}/${src.package.url.name}.${package.suffix}"
+        dest="${basedir}/${src.package.url.name}"/>
+        <unzip src="${basedir}/${bin.package.url.name}.${package.suffix}"
+        dest="${basedir}/${bin.package.url.name}"/>
     </target>
 
     <target name="rat-check" >
 
-        <echo message="Checking files at ${basedir}/${package.url.name}, report is ${rat.report}"/>
+        <echo message="Checking files at ${basedir}/${src.package.url.name}, report is ${src.rat.report}"/>
 
         <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
-            reportFile="${rat.report}">
-            <fileset dir="${basedir}/${package.url.name}">
+            reportFile="${src.rat.report}">
+            <fileset dir="${basedir}/${src.package.url.name}">
                 <!--          Start of binary files           -->
                 <!-- exclude Flash Professional file used for integration with Flash Professional -->
                 <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/>
@@ -289,90 +340,835 @@
             </fileset>
         </rat:report>
 		<antcall target="display-text" >
-            <param name="file" value="${rat.report}" />
+            <param name="file" value="${src.rat.report}" />
         </antcall>
         <input
 			message="Check that there are no unknown or unapproved licenses or archives. Is it ok?"
             validargs="y,n"
         defaultvalue="y"
-        addproperty="rat.license.ok"/>
+        addproperty="rat.src.license.ok"/>
 		<echo>filtering out AL files to make it easier to see binary files</echo>
-		<copy file="${rat.report}" tofile="${rat.report}.bin.txt" />
-		<replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/>
-		<antcall target="display-text" >
-            <param name="file" value="${rat.report}.bin.txt" />
+		<copy file="${src.rat.report}" tofile="${src.rat.report}.bin.txt" />
+        <replaceregexp file="${src.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/>
+        <replaceregexp file="${src.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/>
+        <antcall target="display-text" >
+            <param name="file" value="${src.rat.report}.bin.txt" />
         </antcall>
         <input
-			message="Check that there are no unexpected binaries.  Is it ok?"
-            validargs="y,n"
+        message="Check that there are no unexpected binaries.  Is it ok?"
+        validargs="y,n"
+        defaultvalue="n"
+        addproperty="rat.src.binaries.ok"/>
+        
+        <echo message="Checking files at ${basedir}/${bin.package.url.name}, report is ${bin.rat.report}"/>
+        
+        <antcall target="binary-rat" />
+        <antcall target="display-text" >
+            <param name="file" value="${bin.rat.report}" />
+        </antcall>
+        <input
+        message="Check that there are no unknown or unapproved licenses or archives. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="rat.bin.license.ok"/>
+        <echo>filtering out AL files to make it easier to see binary files</echo>
+        <copy file="${bin.rat.report}" tofile="${bin.rat.report}.bin.txt" />
+        <replaceregexp file="${bin.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/>
+        <replaceregexp file="${bin.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/>
+        <antcall target="display-text" >
+            <param name="file" value="${bin.rat.report}.bin.txt" />
+        </antcall>
+        <input
+        message="Check that there are no unexpected binaries.  Is it ok?"
+        validargs="y,n"
         defaultvalue="n"
-        addproperty="rat.binaries.ok"/>
+        addproperty="rat.bin.binaries.ok"/>
+    </target>
+
+    <target name="binary-rat" >
+        <echo>${jars-list}</echo>
+        <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
+            reportFile="${bin.rat.report}">
+            <fileset dir="${basedir}/${bin.package.url.name}">
+                <!--          Start of binary files           -->
+                <!-- exclude Flash Professional file used for integration with Flash Professional -->
+                <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/>
+                <!-- exclude font embedded in asdoc example -->
+                <exclude name="frameworks/projects/framework/asdoc/en_US/mx/effects/examples/assets/OpenSans-Regular.ttf"/>
+                <!-- exclude media (png, gif, jpg, mp3, flv) -->
+                <exclude name="**/*.png"/>
+                <exclude name="**/*.gif"/>
+                <exclude name="**/*.jpg"/>
+                <exclude name="**/*.mp3"/>
+                <exclude name="**/*.flv"/>
+                <!-- exclude batik icon -->
+                <exclude name="modules/thirdparty/batik/sources/*.icns"/>
+                <!--          End of binary files           -->
+                <!-- exclude batik manifests -->
+                <exclude name="modules/thirdparty/batik/sources/*.mf"/>
+                <!-- exclude text files -->
+                <exclude name="CONTRIBUTING"/>
+                <exclude name="CONTRIBUTORS"/>
+                <exclude name="LICENSE.bin"/>
+                <exclude name="NOTICE.bin"/>
+                <exclude name="NOTICE.asc"/>
+                <exclude name="NOTICE.base"/>
+                <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/>
+                <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/>
+                <exclude name="frameworks/projects/flatspark/src/flatspark/assets/fonts/**/OFL.txt"/>
+                <!-- exclude w3c sources -->
+                <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.mod"/>
+                <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.dtd"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/css/sac/LexicalUnit.java"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/*.java"/>
+                <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/helpers/ParserFactory.java"/>
+                <!-- exclude config files -->
+                <exclude name="modules/thirdparty/batik/svn-revision"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/javax.xml.parsers.SAXParserFactory"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/>
+                <exclude name="modules/thirdparty/xerces-patch/src/java/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"/>
+                <exclude name="frameworks/libs/advancedgrids.swc"/>
+                <exclude name="frameworks/libs/air/airframework.swc"/>
+                <exclude name="frameworks/libs/air/airspark.swc"/>
+                <exclude name="frameworks/libs/apache.swc"/>
+                <exclude name="frameworks/libs/authoringsupport.swc"/>
+                <exclude name="frameworks/libs/automation/automation.swc"/>
+                <exclude name="frameworks/libs/automation/automation_agent.swc"/>
+                <exclude name="frameworks/libs/automation/automation_air.swc"/>
+                <exclude name="frameworks/libs/automation/automation_airspark.swc"/>
+                <exclude name="frameworks/libs/automation/automation_dmv.swc"/>
+                <exclude name="frameworks/libs/automation/automation_flashflexkit.swc"/>
+                <exclude name="frameworks/libs/automation/automation_spark.swc"/>
+                <exclude name="frameworks/libs/automation/tool.swc"/>
+                <exclude name="frameworks/libs/automation/tool_air.swc"/>
+                <exclude name="frameworks/libs/charts.swc"/>
+                <exclude name="frameworks/libs/core.swc"/>
+                <exclude name="frameworks/libs/experimental.swc"/>
+                <exclude name="frameworks/libs/experimental_mobile.swc"/>
+                <exclude name="frameworks/libs/flash-integration.swc"/>
+                <exclude name="frameworks/libs/flatspark.swc"/>
+                <exclude name="frameworks/libs/framework.swc"/>
+                <exclude name="frameworks/libs/mobile/mobilecomponents.swc"/>
+                <exclude name="frameworks/libs/mx/mx.swc"/>
+                <exclude name="frameworks/libs/rpc.swc"/>
+                <exclude name="frameworks/libs/spark.swc"/>
+                <exclude name="frameworks/libs/spark_dmv.swc"/>
+                <exclude name="frameworks/libs/sparkskins.swc"/>
+                <exclude name="frameworks/libs/textLayout.swc"/>
+                <exclude name="frameworks/locale/da_DK/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/apache_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/automation_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/charts_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/framework_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/mx_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/spark_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/da_DK/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/apache_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/automation_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/charts_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/framework_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/mx_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/spark_rb.swc"/>
+                <exclude name="frameworks/locale/de_CH/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/apache_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/automation_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/charts_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/framework_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/mx_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/spark_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/de_DE/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/el_GR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_AU/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_CA/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_GB/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/apache_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/automation_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/charts_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/framework_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/mx_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/spark_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/en_US/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/apache_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/automation_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/charts_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/framework_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/mx_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/spark_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/es_ES/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/fi_FI/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fr_CH/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/fr_FR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/apache_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/automation_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/charts_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/framework_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/mx_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/spark_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/it_IT/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ja_JP/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ko_KR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/apache_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/automation_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/charts_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/framework_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/mx_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/spark_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/nb_NO/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/apache_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/automation_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/charts_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/framework_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/mx_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/spark_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/nl_NL/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/apache_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/automation_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/charts_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/framework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/mx_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/spark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/pt_BR/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/apache_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/automation_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/charts_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/framework_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/mx_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/spark_rb.swc"/>
+                <exclude name="frameworks/locale/pt_PT/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/apache_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/automation_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/charts_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/framework_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/mx_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/spark_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/ru_RU/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/apache_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/automation_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/charts_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/framework_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/mx_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/spark_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/sv_SE/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/apache_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/automation_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/charts_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/flash-integration_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/framework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/mx_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/playerglobal_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/spark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/zh_CN/tool_air_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/advancedgrids_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/airframework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/airspark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/apache_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/automation_agent_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/automation_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/charts_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/experimental_mobile_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/experimental_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/framework_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/mobilecomponents_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/mx_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/rpc_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/spark_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/textLayout_rb.swc"/>
+                <exclude name="frameworks/locale/zh_TW/tool_air_rb.swc"/>
+                <exclude name="frameworks/projects/flash-integration/libs/flash-integration.swc"/>
+                <exclude name="frameworks/themes/Halo/halo.swc"/>
+                <exclude name="frameworks/themes/Mobile/mobile.swc"/>
+                <exclude name="frameworks/themes/Wireframe/wireframe.swc"/>
+                <exclude name="samples/themes/arcade/arcade.swc"/>
+                <exclude name="samples/themes/cobalt/cobalt.swc"/>
+                <exclude name="samples/themes/graphite/graphite.swc"/>
+                <exclude name="frameworks/localFonts.ser"/>
+                <exclude name="frameworks/macFonts.ser"/>
+                <exclude name="frameworks/projects/advancedgrids/bundles.properties"/>
+                <exclude name="frameworks/projects/airframework/bundles.properties"/>
+                <exclude name="frameworks/projects/airspark/bundles.properties"/>
+                <exclude name="frameworks/projects/apache/bundles.properties"/>
+                <exclude name="frameworks/projects/authoringsupport/bundles.properties"/>
+                <exclude name="frameworks/projects/automation/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_agent/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_air/bundles.properties"/>
+                <exclude name="frameworks/projects/automation_airspark/bundles.properties"/>
+                <exclude name="frameworks/projects/charts/bundles.properties"/>
+                <exclude name="frameworks/projects/core/bundles.properties"/>
+                <exclude name="frameworks/projects/experimental/bundles.properties"/>
+                <exclude name="frameworks/projects/experimental_mobile/bundles.properties"/>
+                <exclude name="frameworks/projects/flash-integration/bundles.properties"/>
+                <exclude name="frameworks/projects/flatspark/bundles.properties"/>
+                <exclude name="frameworks/projects/framework/bundles.properties"/>
+                <exclude name="frameworks/projects/halo/bundles.properties"/>
+                <exclude name="frameworks/projects/mobilecomponents/bundles.properties"/>
+                <exclude name="frameworks/projects/mobiletheme/bundles.properties"/>
+                <exclude name="frameworks/projects/mx/bundles.properties"/>
+                <exclude name="frameworks/projects/rpc/bundles.properties"/>
+                <exclude name="frameworks/projects/spark/bundles.properties"/>
+                <exclude name="frameworks/projects/spark_dmv/bundles.properties"/>
+                <exclude name="frameworks/projects/sparkskins/bundles.properties"/>
+                <exclude name="frameworks/projects/tool/bundles.properties"/>
+                <exclude name="frameworks/projects/tool_air/bundles.properties"/>
+                <exclude name="frameworks/projects/wireframe/bundles.properties"/>
+                <exclude name="frameworks/winFonts.ser"/>
+                <!-- external jars.  If you add an external jar, also add it to the external-jar-folder-dump target -->
+                <exclude name="lib/external/commons-collections.jar"/>
+                <exclude name="lib/external/commons-discovery.jar"/>
+                <exclude name="lib/external/commons-logging.jar"/>
+                <exclude name="lib/external/javacc.jar"/>
+                <exclude name="lib/external/saxon9.jar"/>
+                <exclude name="lib/external/xalan.jar"/>
+                <exclude name="lib/external/xercesImpl.jar"/>
+                <exclude name="lib/external/xercesPatch.jar"/>
+                <exclude name="lib/external/xml-apis-ext.jar"/>
+                <exclude name="lib/external/xml-apis.jar"/>
+                <!-- end list of external jars.  Next is their collateral files -->
+                <exclude name="lib/external/README.xml-apis-ext.txt"/>
+                <exclude name="lib/external/commons-collections-LICENSE.txt"/>
+                <exclude name="lib/external/commons-discovery-LICENSE"/>
+                <exclude name="lib/external/commons-logging-NOTICE.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-ANT.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-RESOLVER.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/APACHE-XERCES.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/FRIJTERS.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/GPL+CLASSPATH.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/JAMESCLARK.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/LEGAL.txt"/>
+                <exclude name="lib/external/saxon9-NOTICES/THAI.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/BCEL.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/java_cup.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/regexp.README.txt"/>
+                <exclude name="lib/external/xalan-LICENSES/runtime.README.txt"/>
+                <exclude name="lib/external/xalan-NOTICE"/>
+                <exclude name="lib/external/xerces-LICENSE/LICENSE-SAX.html"/>
+                <exclude name="lib/external/xerces-NOTICES/NOTICE.resolver.txt"/>
+                <exclude name="lib/external/xerces-NOTICES/NOTICE.serializer.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/LICENSE.sax.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/README.dom.txt"/>
+                <exclude name="lib/external/xml-apis-LICENSES/README.sax.txt"/>
+                <exclude name="lib/external/xml-apis-ext-LICENSES/LICENSE.sac.html"/>
+                <exclude name="lib/external/xml-apis-ext-LICENSES/README.dom.txt"/>
+                <!-- this list is generated from a list at the top of this file -->
+                <excludesfile name="${basedir}/jarexcludes.txt" />
+            </fileset>
+        </rat:report>
+    </target>
+    
+    <target name="external-jar-folder-dump" >
+        <echo>list of folders in external jars.  This may impact LICENSE and NOTICE</echo>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-collections.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-discovery.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/commons-logging.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/javacc.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/saxon9.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xalan.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xercesImpl.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xercesPatch.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xml-apis-ext.jar" />
+        </antcall>
+        <antcall target="show-jar-folders" >
+            <param name="thisFile" value="lib/external/xml-apis.jar" />
+        </antcall>
+        <echo>end of list of folders in external jars.  This may impact LICENSE and NOTICE</echo>
+    </target>
+
+    <!-- someday figure out how to use
+     find . -name "*.jar" -exec tar ft {} \; | sort -u > paths.txt -->
+
+    <!-- how to do tar and sort on Windows? -->
+    <target name="examine-jars" if="isMac">
+        <!-- comma delimited list, no spaces, not one file per line -->
+        <copy file="jars.txt" tofile="loop.txt" />
+        <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false" />
+    </target>
+    <target name="loopOnce" >
+        <!-- make a copy of the list so we can munge it to
+         get the first item in the list -->
+        <delete file="loop1.txt" />
+        <copy file="loop.txt" tofile="loop1.txt" />
+        <loadfile srcFile="loop.txt" property="checkiflast" />
+        <condition property="islast" value="true">
+            <not>
+                <contains string="${checkiflast}" substring="," />
+            </not>
+        </condition>
+        <antcall target="notlast" />
+        <antcall target="lastone" />
+    </target>
+    <target name="notlast" unless="islast">
+        <loadfile srcFile="loop1.txt" property="echoFile" />
+        <replaceregexp file="loop1.txt" match="^(.*),(.*)" replace="\2" />
+        <loadfile srcFile="loop1.txt" property="thisFile" />
+        <antcall target="jar-check" />
+        <replaceregexp file="loop.txt" match="^(.*),(.*)" replace="\1" />
+        <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false"/>
+    </target>
+    <target name="lastone" if="islast">
+        <loadfile srcFile="loop1.txt" property="thisFile" />
+        <antcall target="jar-check" />
+        <delete file="loop.txt" />
+        <delete file="loop1.txt" />
+    </target>
+
+    <target name="show-jar-folders">
+        <delete dir="${basedir}/jar" failonerror="false" />
+        <mkdir dir="${basedir}/jar" />
+        <unjar src="${basedir}/${bin.package.url.name}/${thisFile}" dest="${basedir}/jar" />
+        <exec executable="tar" output="${basedir}/jarclasses.txt">
+            <arg value="tf" />
+            <arg value="${basedir}/${bin.package.url.name}/${thisFile}" />
+        </exec>
+        <replaceregexp file="${basedir}/jarclasses.txt" match="(.*)/(.*)" replace="\1" flags="m" byline="true"/>
+        <exec executable="sort" output="${basedir}/jarpaths.txt">
+            <arg value="-u" />
+            <arg value="${basedir}/jarclasses.txt" />
+        </exec>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jarpaths.txt" />
+        </antcall>
+    </target>
+    
+    <target name="jar-check" >
+        <antcall target="show-jar-folders" />
+        <input
+        message="Above is the list of folders in this ${thisFile}.&#xA;Folder names can sometimes indicate presence of third-party content that needs to be in LICENSE and/or NOTICE files.&#xA;Press the Enter key to see the LICENSE for this jar."/>
+        <fail message="LICENSE not in ${basedir}/${bin.package.url.name}/${thisFile}">
+            <condition>
+                <not>
+                    <available file="${basedir}/jar/META-INF/LICENSE" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="NOTICE not in ${basedir}/${bin.package.url.name}/${thisFile}">
+            <condition>
+                <not>
+                    <available file="${basedir}/jar/META-INF/NOTICE" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jar/META-INF/LICENSE" />
+        </antcall>
+        <input
+        message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="jar.license.ok"/>
+        <fail message="LICENSE for ${basedir}/${bin.package.url.name}/${thisFile} not correct">
+            <condition>
+                <not>
+                    <equals arg1="${jar.license.ok}" arg2="y" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/jar/META-INF/NOTICE" />
+        </antcall>
+        <input
+        message="Check the NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="jar.notice.ok"/>
+        <fail message="NOTICE for ${basedir}/${bin.package.url.name}/${thisFile} not correct">
+            <condition>
+                <not>
+                    <equals arg1="${jar.notice.ok}" arg2="y" />
+                </not>
+            </condition>
+        </fail>
+        
     </target>
 
     <target name="check-notices" description="open each notice file for review, grep for a few things" >
-        <fail message="README not in package">
-			<condition>
-	            <not>
-    	            <available file="${basedir}/${package.url.name}/README" />
-        	    </not>
-			</condition>
+        <fail message="README not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/README" />
+                </not>
+            </condition>
         </fail>
-        <fail message="RELEASE_NOTES not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/RELEASE_NOTES" />
-				</not>
-			</condition>
+        <fail message="RELEASE_NOTES not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/RELEASE_NOTES" />
+                </not>
+            </condition>
         </fail>
-        <fail message="NOTICE not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/NOTICE" />
-				</not>
-			</condition>
+        <fail message="NOTICE not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/NOTICE" />
+                </not>
+            </condition>
         </fail>
-        <fail message="LICENSE not in package">
-			<condition>
-				<not>
-					<available file="${basedir}/${package.url.name}/LICENSE" />
-				</not>
-			</condition>
+        <fail message="LICENSE not in source package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${src.package.url.name}/LICENSE" />
+                </not>
+            </condition>
         </fail>
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/README" />
+        <fail message="README not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/README" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="RELEASE_NOTES not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="NOTICE not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/NOTICE" />
+                </not>
+            </condition>
+        </fail>
+        <fail message="LICENSE not in binary package">
+            <condition>
+                <not>
+                    <available file="${basedir}/${bin.package.url.name}/LICENSE" />
+                </not>
+            </condition>
+        </fail>
+        <checksum file="${basedir}/${src.package.url.name}/RELEASE_NOTES" property="src.rnmd5" />
+        <checksum file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" property="bin.rnmd5" />
+        <fail message="RELEASE_NOTES in binary package does not match source package">
+            <condition>
+                <not>
+                    <equals arg1="${src.rnmd5}" arg2="${bin.rnmd5}" />
+                </not>
+            </condition>
+        </fail>
+        <checksum file="${basedir}/${src.package.url.name}/README" property="src.rmd5" />
+        <checksum file="${basedir}/${bin.package.url.name}/README" property="bin.rmd5" />
+        <fail message="README in binary package does not match source package">
+            <condition>
+                <not>
+                    <equals arg1="${src.rmd5}" arg2="${bin.rmd5}" />
+                </not>
+            </condition>
+        </fail>
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/README" />
         </antcall>
-		<input
-			message="Check the README for version numbers, spelling, grammar, accuracy.  Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the README for version numbers, spelling, grammar, accuracy.  Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
         addproperty="readme.ok"/>
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/RELEASE_NOTES" />
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/RELEASE_NOTES" />
         </antcall>
-		<input
-			message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
         addproperty="releasenotes.ok"/>
-		
         
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/NOTICE" />
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/NOTICE" />
         </antcall>
-		<input
-			message="Check the NOTICE for required notices from third-parties. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the source package NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
-        addproperty="notice.ok"/>
-
-		<antcall target="display-text" >
-            <param name="file" value="${basedir}/${package.url.name}/LICENSE" />
+        addproperty="src.notice.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${src.package.url.name}/LICENSE" />
         </antcall>
-		<input
-			message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?"
-            validargs="y,n"
+        <input
+        message="Check the source package LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="src.license.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${bin.package.url.name}/NOTICE" />
+        </antcall>
+        <input
+        message="Check the binary package NOTICE for required notices from third-parties. Is it ok?"
+        validargs="y,n"
         defaultvalue="y"
-        addproperty="license.ok"/>
+        addproperty="bin.notice.ok"/>
+        
+        <antcall target="display-text" >
+            <param name="file" value="${basedir}/${bin.package.url.name}/LICENSE" />
+        </antcall>
+        <input
+        message="Check the binary package LICENSE for the Apache License and third-party licenses. Is it ok?"
+        validargs="y,n"
+        defaultvalue="y"
+        addproperty="bin.license.ok"/>
     </target>
 
     <target name="build" depends="copy.downloads">
@@ -380,16 +1176,16 @@
 			message="The final step is to run the build and any tests the build script runs.  This can take several minutes.  Press y to start the build."
             validargs="y"
         defaultvalue="y" />
-        <chmod file="${basedir}/${package.url.name}/bin/compc" perm="ugo+rx"/>
-        <chmod file="${basedir}/${package.url.name}/bin/mxmlc" perm="ugo+rx"/>
+        <chmod file="${basedir}/${src.package.url.name}/bin/compc" perm="ugo+rx"/>
+        <chmod file="${basedir}/${src.package.url.name}/bin/mxmlc" perm="ugo+rx"/>
         <property name="build.noprompt" value="true" />
-        <ant dir="${basedir}/${package.url.name}" target="main" />
-        <ant dir="${basedir}/${package.url.name}" target="checkintests" />
+        <ant dir="${basedir}/${src.package.url.name}" target="main" />
+        <ant dir="${basedir}/${src.package.url.name}" target="checkintests" />
     </target>
 
     <target name="copy.downloads" if="${do.copy.downloads}" description="instead of actually downloading all of the dependencies, you can save lots of time by just copying from some other folder in some other SDK.">
 		<echo>Copying downloads</echo>
-        <copy todir="${basedir}/${package.url.name}/in" >
+        <copy todir="${basedir}/${src.package.url.name}/in" >
 			<fileset dir="${download.cache.dir}" />
 		</copy>
     </target>
@@ -397,28 +1193,43 @@
 	<target name="approve" >
 		<condition property="vote" value="+1">
 			<and>
-				<equals arg1="${rat.license.ok}" arg2="y" />
-				<equals arg1="${rat.binaries.ok}" arg2="y" />
-				<equals arg1="${readme.ok}" arg2="y" />
-				<equals arg1="${releasenotes.ok}" arg2="y" />
-				<equals arg1="${notice.ok}" arg2="y" />
-				<equals arg1="${license.ok}" arg2="y" />
+                <equals arg1="${rat.src.license.ok}" arg2="y" />
+                <equals arg1="${rat.src.binaries.ok}" arg2="y" />
+                <equals arg1="${rat.bin.license.ok}" arg2="y" />
+                <equals arg1="${rat.bin.binaries.ok}" arg2="y" />
+                <equals arg1="${readme.ok}" arg2="y" />
+                <equals arg1="${releasenotes.ok}" arg2="y" />
+                <equals arg1="${src.notice.ok}" arg2="y" />
+                <equals arg1="${bin.notice.ok}" arg2="y" />
+                <equals arg1="${readmejx.ok}" arg2="y" />
+                <equals arg1="${releasenotesjx.ok}" arg2="y" />
+                <equals arg1="${src.license.ok}" arg2="y" />
+                <equals arg1="${bin.license.ok}" arg2="y" />
 			</and>
 		</condition>
 		<property name="vote" value="-1" />
 		<echo>
 ${vote}
-Package ${package.url.path}/${package.url.name}.${package.suffix}
+Package ${src.package.url.path}/${src.package.url.name}.${package.suffix}
 Java ${ant.java.version}
 OS: ${os.name} ${os.arch} ${os.version}
 Source kit signatures match: y
 Source kit builds: y
 README is ok: ${readme.ok}
 RELEASE_NOTES is ok: ${releasenotes.ok}
-NOTICE is ok: ${notice.ok}
-LICENSE is ok: ${license.ok}
-No unapproved licenses or archives: ${rat.license.ok}
-No unapproved binaries: ${rat.binaries.ok}
+NOTICE is ok: ${src.notice.ok}
+LICENSE is ok: ${src.license.ok}
+No unapproved licenses or archives: ${rat.src.license.ok}
+No unapproved binaries: ${rat.src.binaries.ok}
+
+Package ${bin.package.url.path}/${bin.package.url.name}.${package.suffix}
+Binary kit signatures match: y
+NOTICE is ok: ${bin.notice.ok}
+LICENSE is ok: ${bin.license.ok}
+No unapproved licenses or files in jars: y
+No unapproved licenses or archives in binary package: ${rat.bin.license.ok}
+No unapproved binaries in binary package: ${rat.bin.binaries.ok}
+
 		</echo>
 		<fail>
 			<condition>