[weka] 02/06: Imported Upstream version 3.6.12

Tony Mancill tmancill at moszumanska.debian.org
Mon Mar 16 02:21:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

tmancill pushed a commit to branch master
in repository weka.

commit 3a8b2788daa33b03dd546b2abacd6e590db759ad
Author: tony mancill <tmancill at debian.org>
Date:   Sun Mar 15 17:41:30 2015 -0700

    Imported Upstream version 3.6.12
---
 META-INF/MANIFEST.MF                               |   2 +-
 README                                             |   4 +-
 build.xml                                          |   5 +-
 changelogs/CHANGELOG-3-6-12                        | 231 +++++
 pom.xml                                            |   3 +-
 .../gsp/messages/messages_ar.properties            |   2 +
 .../associations/messages/messages_ar.properties   |   3 +
 .../weka/attributeSelection/CfsSubsetEval.java     | 564 ++++++------
 .../attributeSelection/ConsistencySubsetEval.java  | 413 +++++----
 .../attributeSelection/GainRatioAttributeEval.java | 212 +++--
 .../weka/attributeSelection/GreedyStepwise.java    | 595 ++++++------
 .../weka/attributeSelection/OneRAttributeEval.java |  14 +-
 .../attributeSelection/ReliefFAttributeEval.java   |  14 +-
 .../SubsetSizeForwardSelection.java                | 437 ++++-----
 .../weka/attributeSelection/WrapperSubsetEval.java |  14 +-
 src/main/java/weka/classifiers/Evaluation.java     |  12 +-
 .../classifiers/bayes/NaiveBayesMultinomial.java   |   6 +-
 .../bayes/NaiveBayesMultinomialUpdateable.java     |   2 +-
 .../java/weka/classifiers/trees/RandomForest.java  |  16 +-
 .../java/weka/classifiers/trees/RandomTree.java    |  14 +-
 .../weka/clusterers/HierarchicalClusterer.java     |  14 +-
 .../java/weka/clusterers/UpdateableClusterer.java  |  14 +-
 src/main/java/weka/core/AttributeLocator.java      | 696 +++++++-------
 src/main/java/weka/core/converters/ArffLoader.java | 625 +++++++------
 src/main/java/weka/core/converters/C45Saver.java   | 714 ++++++++-------
 .../java/weka/core/converters/DatabaseLoader.java  |   6 +-
 .../java/weka/core/converters/LibSVMLoader.java    | 374 ++++----
 .../weka/core/converters/TextDirectoryLoader.java  |   9 +-
 .../weka/core/matrix/FlexibleDecimalFormat.java    | 269 +++---
 .../java/weka/core/tokenizers/NGramTokenizer.java  | 260 +++---
 src/main/java/weka/core/version.txt                |   2 +-
 .../clusterers/SubspaceClusterDefinition.java      | 562 +++++++-----
 .../weka/experiment/AveragingResultProducer.java   | 995 +++++++++++----------
 .../weka/experiment/ClassifierSplitEvaluator.java  | 733 ++++++++-------
 .../experiment/CrossValidationResultProducer.java  | 658 ++++++++------
 .../weka/experiment/DatabaseResultProducer.java    | 544 ++++++-----
 src/main/java/weka/experiment/DatabaseUtils.props  |   4 +-
 .../DensityBasedClustererSplitEvaluator.java       | 438 ++++-----
 .../experiment/LearningRateResultProducer.java     | 689 +++++++-------
 .../weka/experiment/RandomSplitResultProducer.java | 776 ++++++++--------
 .../weka/experiment/RegressionSplitEvaluator.java  |  20 +-
 .../supervised/attribute/AttributeSelection.java   |  16 +-
 .../unsupervised/attribute/NumericToNominal.java   | 395 ++++----
 .../unsupervised/attribute/RandomProjection.java   | 991 ++++++++++----------
 src/main/java/weka/gui/GenericObjectEditor.java    |  20 +-
 .../gui/arffviewer/messages/messages_ar.properties | 106 +++
 src/main/java/weka/gui/beans/Classifier.java       | 741 ++++++++-------
 src/main/java/weka/gui/beans/TextViewer.java       | 386 ++++----
 .../weka/gui/beans/messages/messages_ar.properties | 739 +++++++++++++++
 .../gui/beans/xml/messages/messages_ar.properties  |  42 +
 .../messages/messages_ar.properties                | 128 +++
 .../gui/experiment/messages/messages_ar.properties | 290 ++++++
 .../gui/explorer/messages/messages_ar.properties   | 667 ++++++++++++++
 .../messages/messages_ar.properties                |  99 ++
 .../messages/messages_ar.properties                |   4 +
 .../java/weka/gui/messages/messages_ar.properties  | 623 +++++++++++++
 .../gui/sql/event/messages/messages_ar.properties  |   2 +
 .../weka/gui/sql/messages/messages_ar.properties   |  57 ++
 .../gui/streams/messages/messages_ar.properties    |  66 ++
 .../treevisualizer/messages/messages_ar.properties | 216 +++++
 .../gui/visualize/messages/messages_ar.properties  | 234 +++++
 .../weka/core/tokenizers/NGramTokenizerTest.java   |  44 +-
 .../weka/classifiers/trees/RandomForestTest.ref    |   4 +-
 wekadocs/README                                    |   4 +-
 wekadocs/manual/bayesnet.tex                       |   4 +-
 wekadocs/manual/manual.tex                         |   4 +-
 wekadocs/manual/using_api.tex                      |  62 +-
 wekaexamples.zip                                   | Bin 1410385 -> 1412884 bytes
 68 files changed, 10809 insertions(+), 6100 deletions(-)

diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
index e98dc00..52c9038 100644
--- a/META-INF/MANIFEST.MF
+++ b/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Ant-Version: Apache Ant 1.8.2
-Created-By: 1.7.0_21-b12 (Oracle Corporation)
+Created-By: 1.7.0_71-b14 (Oracle Corporation)
 
diff --git a/README b/README
index 74956df..6f7868f 100644
--- a/README
+++ b/README
@@ -4,8 +4,8 @@
                               README                                   
                               ======                                   
                                                                        
-                            WEKA 3.6.11
-                            24 April 2014
+                            WEKA 3.6.12
+                            17 Dec 2014
                                                                        
                  Java Programs for Machine Learning 
 
diff --git a/build.xml b/build.xml
index 6b07357..338ff93 100644
--- a/build.xml
+++ b/build.xml
@@ -9,7 +9,7 @@
    Build file can reside and be executed from either inside weka or the
    directory containing weka.
 
-   $Revision: 10685 $
+   $Revision: 11368 $
   ===========================================================================
 -->
 
@@ -109,7 +109,7 @@
              packagenames="weka.*"
              Author="yes" 
              Public="yes" 
-             maxmemory="256m"/>
+             maxmemory="500m"/>
     
     <!-- insert the links to our homepage and documentation.html -->
     <replace dir="${doc}" 
@@ -485,6 +485,7 @@
     <delete dir="${build}"/>
     <delete dir="${dist}"/>
     <delete dir="${reports}"/>
+    <delete dir="${doc}"/>
   </target>
 
   <target name="superclean" depends="clean"
diff --git a/changelogs/CHANGELOG-3-6-12 b/changelogs/CHANGELOG-3-6-12
new file mode 100644
index 0000000..a9a550d
--- /dev/null
+++ b/changelogs/CHANGELOG-3-6-12
@@ -0,0 +1,231 @@
+------------------------------------------------------------------------
+r10664 | mhall | 2014-04-24 15:39:46 +1200 (Thu, 24 Apr 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/version.txt
+
+Version at 3.6.11
+------------------------------------------------------------------------
+r10667 | mhall | 2014-04-24 15:43:19 +1200 (Thu, 24 Apr 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/version.txt
+
+Version now at 3.6.12-snapshot
+------------------------------------------------------------------------
+r10691 | mhall | 2014-04-24 20:42:31 +1200 (Thu, 24 Apr 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/version.txt
+
+Changed version.txt back to 3.6.11 for the maven release
+------------------------------------------------------------------------
+r10793 | mhall | 2014-04-30 09:49:38 +1200 (Wed, 30 Apr 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/GUIChooser.java
+
+Had a stray System.gc() that was consuming CPU when the GUIChooser was idling - fixed.
+------------------------------------------------------------------------
+r10794 | mhall | 2014-04-30 10:41:06 +1200 (Wed, 30 Apr 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/version.txt
+
+Version is now at 3.6.12-snapshot
+------------------------------------------------------------------------
+r10812 | mhall | 2014-05-03 11:51:52 +1200 (Sat, 03 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/AttributeLocator.java
+
+Updated AttributeLocator to make it compatible with 3.6.10. Old format vectors of Boolean are transferred automatically to new BitSet representation
+------------------------------------------------------------------------
+r10819 | mhall | 2014-05-06 20:33:55 +1200 (Tue, 06 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/beans/Classifier.java
+
+Now appends the fold number, when there is more than one training set in a batch, to the title string in TextEvents.
+------------------------------------------------------------------------
+r10820 | mhall | 2014-05-06 20:34:16 +1200 (Tue, 06 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/beans/TextViewer.java
+
+Switched to a split pane to separate the result list from the text output area. Removed the trimming of result list entry names.
+------------------------------------------------------------------------
+r10832 | mhall | 2014-05-12 11:13:08 +1200 (Mon, 12 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/filters/unsupervised/attribute/RandomProjection.java
+
+From Eibe: Fixed small bug in option handling and in option docs. Setting percentage to a negative number would result in an incorrect options string in getOptions()
+------------------------------------------------------------------------
+r10834 | mhall | 2014-05-12 11:15:58 +1200 (Mon, 12 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/clusterers/UpdateableClusterer.java
+
+Fixed a doc typo.
+------------------------------------------------------------------------
+r10837 | mhall | 2014-05-16 10:04:48 +1200 (Fri, 16 May 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/matrix/FlexibleDecimalFormat.java
+
+From Eibe: Made this change so that HMMWeka runs for numeric data. What was there before did not make sense at all. Now it makes some sort of sense, but I do not really understand what this method is supposed to do. This class was originally in the pace regression package and should really have stayed there. I do not think it is fit for general consumption. This also holds for the FloatingPointFormat class.
+------------------------------------------------------------------------
+r10868 | mhall | 2014-06-14 15:01:22 +1200 (Sat, 14 Jun 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/filters/supervised/attribute/AttributeSelection.java
+
+Fixed a bug where the class attribute was not getting set in the output format when an unsupervised attribute selection method is used.
+------------------------------------------------------------------------
+r10970 | mhall | 2014-07-18 14:46:22 +1200 (Fri, 18 Jul 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/tokenizers/NGramTokenizer.java
+   M /branches/stable-3-6/weka/src/test/java/weka/core/tokenizers/NGramTokenizerTest.java
+
+Georgios Valkanas fix for a bug where the tokenizer would fail to return a token when the string to be tokenized contained fewer than the max ngram size.
+------------------------------------------------------------------------
+r10974 | mhall | 2014-07-18 19:35:04 +1200 (Fri, 18 Jul 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/classifiers/Evaluation.java
+
+Fixed bug in error message.
+------------------------------------------------------------------------
+r10988 | mhall | 2014-07-21 16:14:42 +1200 (Mon, 21 Jul 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/filters/unsupervised/attribute/NumericToNominal.java
+
+Fixed bug occuring when NumericToNominal is used in batch mode.
+------------------------------------------------------------------------
+r10993 | mhall | 2014-07-21 19:18:58 +1200 (Mon, 21 Jul 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/classifiers/trees/RandomForest.java
+   M /branches/stable-3-6/weka/src/main/java/weka/classifiers/trees/RandomTree.java
+   M /branches/stable-3-6/weka/src/test/resources/wekarefs/weka/classifiers/trees/RandomForestTest.ref
+
+RandomForest and RandomTree now use int(log_2(#predictors)+1) rather than int(log_2(#predictors + 1)+1) to be consistent with the original heuristic proposed by Breiman. Also 100 trees are used by default in RandomForest now, rather than 10.
+------------------------------------------------------------------------
+r11023 | mhall | 2014-07-25 12:21:41 +1200 (Fri, 25 Jul 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/remote.policy
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/remote.policy.example
+
+Updated properties
+------------------------------------------------------------------------
+r11137 | mhall | 2014-09-09 08:58:18 +1200 (Tue, 09 Sep 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/converters/ArffLoader.java
+
+Fixed an npe that could occur when no source reader has been specified.
+------------------------------------------------------------------------
+r11149 | mhall | 2014-09-12 11:10:23 +1200 (Fri, 12 Sep 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/DatabaseUtils.props
+
+Suppressed output of warning message for missing JDBC driver classes.
+------------------------------------------------------------------------
+r11198 | mhall | 2014-10-12 17:21:01 +1300 (Sun, 12 Oct 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/SubsetSizeForwardSelection.java
+   M /branches/stable-3-6/weka/src/main/java/weka/core/converters/C45Saver.java
+   M /branches/stable-3-6/weka/src/main/java/weka/datagenerators/clusterers/SubspaceClusterDefinition.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/AveragingResultProducer.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/ClassifierSplitEvaluator.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/CrossValidationResultProducer.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/DatabaseResultProducer.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/DensityBasedClustererSplitEvaluator.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/LearningRateResultProducer.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/RandomSplitResultProducer.java
+   M /branches/stable-3-6/weka/src/main/java/weka/experiment/RegressionSplitEvaluator.java
+
+Fixing up some CheckOptionHandler failures so that maven tests will pass
+------------------------------------------------------------------------
+r11199 | mhall | 2014-10-13 04:27:27 +1300 (Mon, 13 Oct 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/converters/DatabaseLoader.java
+   M /branches/stable-3-6/weka/src/main/java/weka/core/converters/TextDirectoryLoader.java
+
+Fixing up some CheckOptionHandler failures so that maven tests will pass
+------------------------------------------------------------------------
+r11219 | mhall | 2014-10-16 21:22:44 +1300 (Thu, 16 Oct 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/CfsSubsetEval.java
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/ConsistencySubsetEval.java
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/GainRatioAttributeEval.java
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/OneRAttributeEval.java
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/ReliefFAttributeEval.java
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/WrapperSubsetEval.java
+
+Now releases a reference to the training data after attribute selection has completed
+------------------------------------------------------------------------
+r11229 | mhall | 2014-10-17 09:44:02 +1300 (Fri, 17 Oct 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/attributeSelection/GreedyStepwise.java
+
+Was holding a reference to the training data - fixed.
+------------------------------------------------------------------------
+r11303 | mhall | 2014-11-21 09:20:49 +1300 (Fri, 21 Nov 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomial.java
+
+Corrected a call to isMissing() that should have been isMissingSparse().
+------------------------------------------------------------------------
+r11304 | mhall | 2014-11-21 09:21:44 +1300 (Fri, 21 Nov 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomialUpdateable.java
+
+Corrected a call to isMissing() that should have been isMissingSparse().
+------------------------------------------------------------------------
+r11330 | mhall | 2014-11-28 09:29:15 +1300 (Fri, 28 Nov 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/clusterers/HierarchicalClusterer.java
+
+Locale for output of numbers in Newick format is now fixed to US English.
+------------------------------------------------------------------------
+r11356 | mhall | 2014-12-09 14:14:21 +1300 (Tue, 09 Dec 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/GenericObjectEditor.java
+
+Some html tags had been externalized into message bundles - fixed.
+------------------------------------------------------------------------
+r11357 | mhall | 2014-12-09 14:30:27 +1300 (Tue, 09 Dec 2014) | 1 line
+Changed paths:
+   A /branches/stable-3-6/weka/src/main/java/weka/associations/gsp/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/associations/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/arffviewer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/beans/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/beans/xml/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/boundaryvisualizer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/experiment/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/explorer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/graphvisualizer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/hierarchyvisualizer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/sql/event/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/sql/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/streams/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/treevisualizer/messages/messages_ar.properties
+   A /branches/stable-3-6/weka/src/main/java/weka/gui/visualize/messages/messages_ar.properties
+
+i18n message files for Arabic courtesy of Marwa Varouqa
+------------------------------------------------------------------------
+r11362 | mhall | 2014-12-09 15:59:59 +1300 (Tue, 09 Dec 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/core/converters/LibSVMLoader.java
+
+Faster getStructure() implementation courtesy of Victor-Philipp Negoescu
+------------------------------------------------------------------------
+r11380 | mhall | 2014-12-15 13:27:11 +1300 (Mon, 15 Dec 2014) | 1 line
+Changed paths:
+   M /branches/stable-3-6/weka/src/main/java/weka/associations/gsp/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/associations/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/arffviewer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/beans/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/beans/xml/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/boundaryvisualizer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/experiment/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/explorer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/graphvisualizer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/hierarchyvisualizer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/sql/event/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/sql/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/streams/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/treevisualizer/messages/messages_ar.properties
+   M /branches/stable-3-6/weka/src/main/java/weka/gui/visualize/messages/messages_ar.properties
+
+Updated Arabic message files from Marwa Varouqa
+------------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2780090..80c809d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
   <groupId>nz.ac.waikato.cms.weka</groupId>
   <artifactId>weka-stable</artifactId>
-  <version>3.6.11-SNAPSHOT</version><!-- weka-version -->
+  <version>3.6.12-SNAPSHOT</version><!-- weka-version -->
   <packaging>jar</packaging>
 
   <name>weka-stable</name>
@@ -203,6 +203,7 @@
             <redirectTestOutputToFile>true</redirectTestOutputToFile>
             <systemPropertyVariables>
               <weka.test.Regression.root>src/test/resources/wekarefs</weka.test.Regression.root>
+	      <user.timezone>Pacific/Auckland</user.timezone>
             </systemPropertyVariables>
           </configuration>
         </plugin>
diff --git a/src/main/java/weka/associations/gsp/messages/messages_ar.properties b/src/main/java/weka/associations/gsp/messages/messages_ar.properties
new file mode 100644
index 0000000..baa5771
--- /dev/null
+++ b/src/main/java/weka/associations/gsp/messages/messages_ar.properties
@@ -0,0 +1,2 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
diff --git a/src/main/java/weka/associations/messages/messages_ar.properties b/src/main/java/weka/associations/messages/messages_ar.properties
new file mode 100644
index 0000000..b0b9281
--- /dev/null
+++ b/src/main/java/weka/associations/messages/messages_ar.properties
@@ -0,0 +1,3 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+APRIORI_AUTHOR=\n\u0631. \u0623\u063A\u0631\u0627\u0648\u0627\u0644 \u0648 \u0631. \u0633\u0631\u064A\u0643\u0627\u0646\u062A
diff --git a/src/main/java/weka/attributeSelection/CfsSubsetEval.java b/src/main/java/weka/attributeSelection/CfsSubsetEval.java
index 676cf08..c3de9b5 100644
--- a/src/main/java/weka/attributeSelection/CfsSubsetEval.java
+++ b/src/main/java/weka/attributeSelection/CfsSubsetEval.java
@@ -20,9 +20,14 @@
  *
  */
 
-package  weka.attributeSelection;
+package weka.attributeSelection;
+
+import java.util.BitSet;
+import java.util.Enumeration;
+import java.util.Vector;
 
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.ContingencyTables;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -30,34 +35,32 @@ import weka.core.Option;
 import weka.core.OptionHandler;
 import weka.core.RevisionUtils;
 import weka.core.TechnicalInformation;
-import weka.core.TechnicalInformationHandler;
-import weka.core.Utils;
-import weka.core.Capabilities.Capability;
 import weka.core.TechnicalInformation.Field;
 import weka.core.TechnicalInformation.Type;
+import weka.core.TechnicalInformationHandler;
+import weka.core.Utils;
 import weka.filters.Filter;
 import weka.filters.supervised.attribute.Discretize;
 
-import java.util.BitSet;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/** 
- <!-- globalinfo-start -->
- * CfsSubsetEval :<br/>
+/**
+ * <!-- globalinfo-start --> CfsSubsetEval :<br/>
  * <br/>
- * Evaluates the worth of a subset of attributes by considering the individual predictive ability of each feature along with the degree of redundancy between them.<br/>
+ * Evaluates the worth of a subset of attributes by considering the individual
+ * predictive ability of each feature along with the degree of redundancy
+ * between them.<br/>
  * <br/>
- * Subsets of features that are highly correlated with the class while having low intercorrelation are preferred.<br/>
+ * Subsets of features that are highly correlated with the class while having
+ * low intercorrelation are preferred.<br/>
  * <br/>
  * For more information see:<br/>
  * <br/>
- * M. A. Hall (1998). Correlation-based Feature Subset Selection for Machine Learning. Hamilton, New Zealand.
+ * M. A. Hall (1998). Correlation-based Feature Subset Selection for Machine
+ * Learning. Hamilton, New Zealand.
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- technical-bibtex-start -->
- * BibTeX:
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- technical-bibtex-start --> BibTeX:
+ * 
  * <pre>
  * @phdthesis{Hall1998,
  *    address = {Hamilton, New Zealand},
@@ -68,29 +71,33 @@ import java.util.Vector;
  * }
  * </pre>
  * <p/>
- <!-- technical-bibtex-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- technical-bibtex-end -->
+ * 
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -M
+ *  Treat missing values as a separate value.
+ * </pre>
  * 
- * <pre> -M
- *  Treat missing values as a separate value.</pre>
+ * <pre>
+ * -L
+ *  Don't include locally predictive attributes.
+ * </pre>
  * 
- * <pre> -L
- *  Don't include locally predictive attributes.</pre>
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 6133 $
+ * @version $Revision: 11219 $
  * @see Discretize
  */
 public class CfsSubsetEval
   extends ASEvaluation
-  implements SubsetEvaluator, 
-             OptionHandler, 
-             TechnicalInformationHandler {
-  
+  implements SubsetEvaluator,
+  OptionHandler,
+  TechnicalInformationHandler {
+
   /** for serialization */
   static final long serialVersionUID = 747878400813276317L;
 
@@ -111,8 +118,8 @@ public class CfsSubsetEval
   /** Include locally predicitive attributes */
   private boolean m_locallyPredictive;
   /** Holds the matrix of attribute correlations */
-  //  private Matrix m_corr_matrix;
-  private float [][] m_corr_matrix;
+  // private Matrix m_corr_matrix;
+  private float[][] m_corr_matrix;
   /** Standard deviations of attributes (when using pearsons correlation) */
   private double[] m_std_devs;
   /** Threshold for admitting locally predictive features */
@@ -120,81 +127,91 @@ public class CfsSubsetEval
 
   /**
    * Returns a string describing this attribute evaluator
-   * @return a description of the evaluator suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the evaluator suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "CfsSubsetEval :\n\nEvaluates the worth of a subset of attributes "
-      +"by considering the individual predictive ability of each feature "
-      +"along with the degree of redundancy between them.\n\n"
-      +"Subsets of features that are highly correlated with the class "
-      +"while having low intercorrelation are preferred.\n\n"
+      + "by considering the individual predictive ability of each feature "
+      + "along with the degree of redundancy between them.\n\n"
+      + "Subsets of features that are highly correlated with the class "
+      + "while having low intercorrelation are preferred.\n\n"
       + "For more information see:\n\n"
       + getTechnicalInformation().toString();
   }
 
   /**
-   * Returns an instance of a TechnicalInformation object, containing 
-   * detailed information about the technical background of this class,
-   * e.g., paper reference or book this class is based on.
+   * Returns an instance of a TechnicalInformation object, containing detailed
+   * information about the technical background of this class, e.g., paper
+   * reference or book this class is based on.
    * 
    * @return the technical information about this class
    */
+  @Override
   public TechnicalInformation getTechnicalInformation() {
-    TechnicalInformation        result;
-    
+    TechnicalInformation result;
+
     result = new TechnicalInformation(Type.PHDTHESIS);
     result.setValue(Field.AUTHOR, "M. A. Hall");
     result.setValue(Field.YEAR, "1998");
-    result.setValue(Field.TITLE, "Correlation-based Feature Subset Selection for Machine Learning");
+    result.setValue(Field.TITLE,
+      "Correlation-based Feature Subset Selection for Machine Learning");
     result.setValue(Field.SCHOOL, "University of Waikato");
     result.setValue(Field.ADDRESS, "Hamilton, New Zealand");
-    
+
     return result;
   }
 
   /**
    * Constructor
    */
-  public CfsSubsetEval () {
+  public CfsSubsetEval() {
     resetOptions();
   }
 
-
   /**
    * Returns an enumeration describing the available options.
+   * 
    * @return an enumeration of all the available options.
-   *
+   * 
    **/
-  public Enumeration listOptions () {
+  @Override
+  public Enumeration listOptions() {
     Vector newVector = new Vector(3);
-    newVector.addElement(new Option("\tTreat missing values as a separate " 
-                                    + "value.", "M", 0, "-M"));
-    newVector.addElement(new Option("\tDon't include locally predictive attributes" 
-                                    + ".", "L", 0, "-L"));
-    return  newVector.elements();
+    newVector.addElement(new Option("\tTreat missing values as a separate "
+      + "value.", "M", 0, "-M"));
+    newVector.addElement(new Option(
+      "\tDon't include locally predictive attributes"
+        + ".", "L", 0, "-L"));
+    return newVector.elements();
   }
 
-
   /**
-   * Parses and sets a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses and sets a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -M
-   *  Treat missing values as a separate value.</pre>
+   * <pre>
+   * -M
+   *  Treat missing values as a separate value.
+   * </pre>
    * 
-   * <pre> -L
-   *  Don't include locally predictive attributes.</pre>
+   * <pre>
+   * -L
+   *  Don't include locally predictive attributes.
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
-   *
+   * 
    **/
-  public void setOptions (String[] options)
+  @Override
+  public void setOptions(String[] options)
     throws Exception {
 
     resetOptions();
@@ -204,72 +221,72 @@ public class CfsSubsetEval
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String locallyPredictiveTipText() {
     return "Identify locally predictive attributes. Iteratively adds "
-      +"attributes with the highest correlation with the class as long "
-      +"as there is not already an attribute in the subset that has a "
-      +"higher correlation with the attribute in question";
+      + "attributes with the highest correlation with the class as long "
+      + "as there is not already an attribute in the subset that has a "
+      + "higher correlation with the attribute in question";
   }
 
   /**
    * Include locally predictive attributes
-   *
+   * 
    * @param b true or false
    */
-  public void setLocallyPredictive (boolean b) {
+  public void setLocallyPredictive(boolean b) {
     m_locallyPredictive = b;
   }
 
-
   /**
    * Return true if including locally predictive attributes
-   *
+   * 
    * @return true if locally predictive attributes are to be used
    */
-  public boolean getLocallyPredictive () {
-    return  m_locallyPredictive;
+  public boolean getLocallyPredictive() {
+    return m_locallyPredictive;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String missingSeparateTipText() {
     return "Treat missing as a separate value. Otherwise, counts for missing "
-      +"values are distributed across other values in proportion to their "
-      +"frequency.";
+      + "values are distributed across other values in proportion to their "
+      + "frequency.";
   }
 
   /**
    * Treat missing as a separate value
-   *
+   * 
    * @param b true or false
    */
-  public void setMissingSeparate (boolean b) {
+  public void setMissingSeparate(boolean b) {
     m_missingSeparate = b;
   }
 
-
   /**
    * Return true is missing is treated as a separate value
-   *
+   * 
    * @return true if missing is to be treated as a separate value
    */
-  public boolean getMissingSeparate () {
-    return  m_missingSeparate;
+  public boolean getMissingSeparate() {
+    return m_missingSeparate;
   }
 
-
   /**
    * Gets the current settings of CfsSubsetEval
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions()
    */
-  public String[] getOptions () {
+  @Override
+  public String[] getOptions() {
     String[] options = new String[2];
     int current = 0;
 
@@ -285,46 +302,47 @@ public class CfsSubsetEval
       options[current++] = "";
     }
 
-    return  options;
+    return options;
   }
 
   /**
    * Returns the capabilities of this evaluator.
-   *
-   * @return            the capabilities of this evaluator
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this evaluator
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
     result.disableAll();
-    
+
     // attributes
     result.enable(Capability.NOMINAL_ATTRIBUTES);
     result.enable(Capability.NUMERIC_ATTRIBUTES);
     result.enable(Capability.DATE_ATTRIBUTES);
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enable(Capability.NOMINAL_CLASS);
     result.enable(Capability.NUMERIC_CLASS);
     result.enable(Capability.DATE_CLASS);
     result.enable(Capability.MISSING_CLASS_VALUES);
-    
+
     return result;
   }
 
   /**
-   * Generates a attribute evaluator. Has to initialize all fields of the 
+   * Generates a attribute evaluator. Has to initialize all fields of the
    * evaluator that are not being set via options.
-   *
-   * CFS also discretises attributes (if necessary) and initializes
-   * the correlation matrix.
-   *
-   * @param data set of instances serving as training data 
-   * @throws Exception if the evaluator has not been 
-   * generated successfully
+   * 
+   * CFS also discretises attributes (if necessary) and initializes the
+   * correlation matrix.
+   * 
+   * @param data set of instances serving as training data
+   * @throws Exception if the evaluator has not been generated successfully
    */
-  public void buildEvaluator (Instances data)
+  @Override
+  public void buildEvaluator(Instances data)
     throws Exception {
 
     // can evaluator handle data?
@@ -345,9 +363,9 @@ public class CfsSubsetEval
     }
 
     m_std_devs = new double[m_numAttribs];
-    m_corr_matrix = new float [m_numAttribs][];
+    m_corr_matrix = new float[m_numAttribs][];
     for (int i = 0; i < m_numAttribs; i++) {
-      m_corr_matrix[i] = new float [i+1];
+      m_corr_matrix[i] = new float[i + 1];
     }
 
     for (int i = 0; i < m_corr_matrix.length; i++) {
@@ -362,16 +380,15 @@ public class CfsSubsetEval
     }
   }
 
-
   /**
    * evaluates a subset of attributes
-   *
-   * @param subset a bitset representing the attribute subset to be 
-   * evaluated 
+   * 
+   * @param subset a bitset representing the attribute subset to be evaluated
    * @return the merit
    * @throws Exception if the subset could not be evaluated
    */
-  public double evaluateSubset (BitSet subset)
+  @Override
+  public double evaluateSubset(BitSet subset)
     throws Exception {
     double num = 0.0;
     double denom = 0.0;
@@ -382,12 +399,16 @@ public class CfsSubsetEval
       if (i != m_classIndex) {
         if (subset.get(i)) {
           if (i > m_classIndex) {
-            larger = i; smaller = m_classIndex;
+            larger = i;
+            smaller = m_classIndex;
           } else {
-            smaller = i; larger = m_classIndex;
+            smaller = i;
+            larger = m_classIndex;
           }
-          /*      int larger = (i > m_classIndex ? i : m_classIndex);
-                  int smaller = (i > m_classIndex ? m_classIndex : i); */
+          /*
+           * int larger = (i > m_classIndex ? i : m_classIndex); int smaller =
+           * (i > m_classIndex ? m_classIndex : i);
+           */
           if (m_corr_matrix[larger][smaller] == -999) {
             corr = correlate(i, m_classIndex);
             m_corr_matrix[larger][smaller] = corr;
@@ -414,7 +435,8 @@ public class CfsSubsetEval
                 denom += (2.0 * m_std_devs[i] * m_std_devs[j] * corr);
               }
               else {
-                denom += (2.0 * m_std_devs[i] * m_std_devs[j] * m_corr_matrix[i][j]);
+                denom +=
+                  (2.0 * m_std_devs[i] * m_std_devs[j] * m_corr_matrix[i][j]);
               }
             }
           }
@@ -427,44 +449,44 @@ public class CfsSubsetEval
     }
 
     if (denom == 0.0) {
-      return  (0.0);
+      return (0.0);
     }
 
-    double merit = (num/Math.sqrt(denom));
+    double merit = (num / Math.sqrt(denom));
 
     if (merit < 0.0) {
       merit *= -1.0;
     }
 
-    return  merit;
+    return merit;
   }
 
-
-  private float correlate (int att1, int att2) {
+  private float correlate(int att1, int att2) {
     if (!m_isNumeric) {
-      return  (float) symmUncertCorr(att1, att2);
+      return (float) symmUncertCorr(att1, att2);
     }
 
     boolean att1_is_num = (m_trainInstances.attribute(att1).isNumeric());
     boolean att2_is_num = (m_trainInstances.attribute(att2).isNumeric());
 
     if (att1_is_num && att2_is_num) {
-      return  (float) num_num(att1, att2);
-    }
-    else {if (att2_is_num) {
-      return  (float) num_nom2(att1, att2);
-    }
-    else {if (att1_is_num) {
-      return  (float) num_nom2(att2, att1);
-    }
+      return (float) num_num(att1, att2);
     }
+    else {
+      if (att2_is_num) {
+        return (float) num_nom2(att1, att2);
+      }
+      else {
+        if (att1_is_num) {
+          return (float) num_nom2(att2, att1);
+        }
+      }
     }
 
     return (float) nom_nom(att1, att2);
   }
 
-
-  private double symmUncertCorr (int att1, int att2) {
+  private double symmUncertCorr(int att1, int att2) {
     int i, j, k, ii, jj;
     int ni, nj;
     double sum = 0.0;
@@ -502,14 +524,14 @@ public class CfsSubsetEval
         ii = ni - 1;
       }
       else {
-        ii = (int)inst.value(att1);
+        ii = (int) inst.value(att1);
       }
 
       if (inst.isMissing(att2)) {
         jj = nj - 1;
       }
       else {
-        jj = (int)inst.value(att2);
+        jj = (int) inst.value(att2);
       }
 
       counts[ii][jj]++;
@@ -535,9 +557,9 @@ public class CfsSubsetEval
     }
 
     // distribute missing counts
-    if (!m_missingSeparate && 
-        (sumi[ni-1] < m_numInstances) && 
-        (sumj[nj-1] < m_numInstances)) {
+    if (!m_missingSeparate &&
+      (sumi[ni - 1] < m_numInstances) &&
+      (sumj[nj - 1] < m_numInstances)) {
       double[] i_copy = new double[sumi.length];
       double[] j_copy = new double[sumj.length];
       double[][] counts_copy = new double[sumi.length][sumj.length];
@@ -548,7 +570,7 @@ public class CfsSubsetEval
 
       System.arraycopy(sumi, 0, i_copy, 0, sumi.length);
       System.arraycopy(sumj, 0, j_copy, 0, sumj.length);
-      double total_missing = 
+      double total_missing =
         (sumi[ni - 1] + sumj[nj - 1] - counts[ni - 1][nj - 1]);
 
       // do the missing i's
@@ -556,7 +578,7 @@ public class CfsSubsetEval
         for (j = 0; j < nj - 1; j++) {
           if (counts[ni - 1][j] > 0.0) {
             for (i = 0; i < ni - 1; i++) {
-              temp = ((i_copy[i]/(sum - i_copy[ni - 1]))*counts[ni - 1][j]);
+              temp = ((i_copy[i] / (sum - i_copy[ni - 1])) * counts[ni - 1][j]);
               counts[i][j] += temp;
               sumi[i] += temp;
             }
@@ -573,7 +595,7 @@ public class CfsSubsetEval
         for (i = 0; i < ni - 1; i++) {
           if (counts[i][nj - 1] > 0.0) {
             for (j = 0; j < nj - 1; j++) {
-              temp = ((j_copy[j]/(sum - j_copy[nj - 1]))*counts[i][nj - 1]);
+              temp = ((j_copy[j] / (sum - j_copy[nj - 1])) * counts[i][nj - 1]);
               counts[i][j] += temp;
               sumj[j] += temp;
             }
@@ -589,9 +611,9 @@ public class CfsSubsetEval
       if (counts[ni - 1][nj - 1] > 0.0 && total_missing != sum) {
         for (i = 0; i < ni - 1; i++) {
           for (j = 0; j < nj - 1; j++) {
-            temp = (counts_copy[i][j]/(sum - total_missing)) * 
+            temp = (counts_copy[i][j] / (sum - total_missing)) *
               counts_copy[ni - 1][nj - 1];
-            
+
             counts[i][j] += temp;
             sumi[i] += temp;
             sumj[j] += temp;
@@ -606,19 +628,18 @@ public class CfsSubsetEval
 
     if (Utils.eq(corr_measure, 0.0)) {
       if (flag == true) {
-        return  (0.0);
+        return (0.0);
       }
       else {
-        return  (1.0);
+        return (1.0);
       }
     }
     else {
-      return  (corr_measure);
+      return (corr_measure);
     }
   }
 
-
-  private double num_num (int att1, int att2) {
+  private double num_num(int att1, int att2) {
     int i;
     Instance inst;
     double r, diff1, diff2, num = 0.0, sx = 0.0, sy = 0.0;
@@ -627,53 +648,52 @@ public class CfsSubsetEval
 
     for (i = 0; i < m_numInstances; i++) {
       inst = m_trainInstances.instance(i);
-      diff1 = (inst.isMissing(att1))? 0.0 : (inst.value(att1) - mx);
-      diff2 = (inst.isMissing(att2))? 0.0 : (inst.value(att2) - my);
-      num += (diff1*diff2);
-      sx += (diff1*diff1);
-      sy += (diff2*diff2);
+      diff1 = (inst.isMissing(att1)) ? 0.0 : (inst.value(att1) - mx);
+      diff2 = (inst.isMissing(att2)) ? 0.0 : (inst.value(att2) - my);
+      num += (diff1 * diff2);
+      sx += (diff1 * diff1);
+      sy += (diff2 * diff2);
     }
 
     if (sx != 0.0) {
       if (m_std_devs[att1] == 1.0) {
-        m_std_devs[att1] = Math.sqrt((sx/m_numInstances));
+        m_std_devs[att1] = Math.sqrt((sx / m_numInstances));
       }
     }
 
     if (sy != 0.0) {
       if (m_std_devs[att2] == 1.0) {
-        m_std_devs[att2] = Math.sqrt((sy/m_numInstances));
+        m_std_devs[att2] = Math.sqrt((sy / m_numInstances));
       }
     }
 
-    if ((sx*sy) > 0.0) {
-      r = (num/(Math.sqrt(sx*sy)));
-      return  ((r < 0.0)? -r : r);
+    if ((sx * sy) > 0.0) {
+      r = (num / (Math.sqrt(sx * sy)));
+      return ((r < 0.0) ? -r : r);
     }
     else {
       if (att1 != m_classIndex && att2 != m_classIndex) {
-        return  1.0;
+        return 1.0;
       }
       else {
-        return  0.0;
+        return 0.0;
       }
     }
   }
 
-
-  private double num_nom2 (int att1, int att2) {
+  private double num_nom2(int att1, int att2) {
     int i, ii, k;
     double temp;
     Instance inst;
-    int mx = (int)m_trainInstances.
+    int mx = (int) m_trainInstances.
       meanOrMode(m_trainInstances.attribute(att1));
     double my = m_trainInstances.
       meanOrMode(m_trainInstances.attribute(att2));
     double stdv_num = 0.0;
     double diff1, diff2;
     double r = 0.0, rr;
-    int nx = (!m_missingSeparate) 
-      ? m_trainInstances.attribute(att1).numValues() 
+    int nx = (!m_missingSeparate)
+      ? m_trainInstances.attribute(att1).numValues()
       : m_trainInstances.attribute(att1).numValues() + 1;
 
     double[] prior_nom = new double[nx];
@@ -684,7 +704,7 @@ public class CfsSubsetEval
       stdvs_nom[i] = covs[i] = prior_nom[i] = 0.0;
     }
 
-    // calculate frequencies (and means) of the values of the nominal 
+    // calculate frequencies (and means) of the values of the nominal
     // attribute
     for (i = 0; i < m_numInstances; i++) {
       inst = m_trainInstances.instance(i);
@@ -698,7 +718,7 @@ public class CfsSubsetEval
         }
       }
       else {
-        ii = (int)inst.value(att1);
+        ii = (int) inst.value(att1);
       }
 
       // increment freq for nominal
@@ -708,51 +728,55 @@ public class CfsSubsetEval
     for (k = 0; k < m_numInstances; k++) {
       inst = m_trainInstances.instance(k);
       // std dev of numeric attribute
-      diff2 = (inst.isMissing(att2))? 0.0 : (inst.value(att2) - my);
-      stdv_num += (diff2*diff2);
+      diff2 = (inst.isMissing(att2)) ? 0.0 : (inst.value(att2) - my);
+      stdv_num += (diff2 * diff2);
 
-      // 
+      //
       for (i = 0; i < nx; i++) {
         if (inst.isMissing(att1)) {
           if (!m_missingSeparate) {
-            temp = (i == mx)? 1.0 : 0.0;
+            temp = (i == mx) ? 1.0 : 0.0;
           }
           else {
-            temp = (i == (nx - 1))? 1.0 : 0.0;
+            temp = (i == (nx - 1)) ? 1.0 : 0.0;
           }
         }
         else {
-          temp = (i == inst.value(att1))? 1.0 : 0.0;
+          temp = (i == inst.value(att1)) ? 1.0 : 0.0;
         }
 
-        diff1 = (temp - (prior_nom[i]/m_numInstances));
-        stdvs_nom[i] += (diff1*diff1);
-        covs[i] += (diff1*diff2);
+        diff1 = (temp - (prior_nom[i] / m_numInstances));
+        stdvs_nom[i] += (diff1 * diff1);
+        covs[i] += (diff1 * diff2);
       }
     }
 
     // calculate weighted correlation
     for (i = 0, temp = 0.0; i < nx; i++) {
       // calculate the weighted variance of the nominal
-      temp += ((prior_nom[i]/m_numInstances)*(stdvs_nom[i]/m_numInstances));
+      temp +=
+        ((prior_nom[i] / m_numInstances) * (stdvs_nom[i] / m_numInstances));
 
-      if ((stdvs_nom[i]*stdv_num) > 0.0) {
-        //System.out.println("Stdv :"+stdvs_nom[i]);
-        rr = (covs[i]/(Math.sqrt(stdvs_nom[i]*stdv_num)));
+      if ((stdvs_nom[i] * stdv_num) > 0.0) {
+        // System.out.println("Stdv :"+stdvs_nom[i]);
+        rr = (covs[i] / (Math.sqrt(stdvs_nom[i] * stdv_num)));
 
         if (rr < 0.0) {
           rr = -rr;
         }
 
-        r += ((prior_nom[i]/m_numInstances)*rr);
-      }
-      /* if there is zero variance for the numeric att at a specific 
-         level of the catergorical att then if neither is the class then 
-         make this correlation at this level maximally bad i.e. 1.0. 
-         If either is the class then maximally bad correlation is 0.0 */
-      else {if (att1 != m_classIndex && att2 != m_classIndex) {
-        r += ((prior_nom[i]/m_numInstances)*1.0);
+        r += ((prior_nom[i] / m_numInstances) * rr);
       }
+      /*
+       * if there is zero variance for the numeric att at a specific level of
+       * the catergorical att then if neither is the class then make this
+       * correlation at this level maximally bad i.e. 1.0. If either is the
+       * class then maximally bad correlation is 0.0
+       */
+      else {
+        if (att1 != m_classIndex && att2 != m_classIndex) {
+          r += ((prior_nom[i] / m_numInstances) * 1.0);
+        }
       }
     }
 
@@ -766,7 +790,7 @@ public class CfsSubsetEval
 
     if (stdv_num != 0.0) {
       if (m_std_devs[att2] == 1.0) {
-        m_std_devs[att2] = Math.sqrt((stdv_num/m_numInstances));
+        m_std_devs[att2] = Math.sqrt((stdv_num / m_numInstances));
       }
     }
 
@@ -776,26 +800,25 @@ public class CfsSubsetEval
       }
     }
 
-    return  r;
+    return r;
   }
 
-
-  private double nom_nom (int att1, int att2) {
+  private double nom_nom(int att1, int att2) {
     int i, j, ii, jj, z;
     double temp1, temp2;
     Instance inst;
-    int mx = (int)m_trainInstances.
+    int mx = (int) m_trainInstances.
       meanOrMode(m_trainInstances.attribute(att1));
-    int my = (int)m_trainInstances.
+    int my = (int) m_trainInstances.
       meanOrMode(m_trainInstances.attribute(att2));
     double diff1, diff2;
     double r = 0.0, rr;
-    int nx = (!m_missingSeparate) 
-      ? m_trainInstances.attribute(att1).numValues() 
+    int nx = (!m_missingSeparate)
+      ? m_trainInstances.attribute(att1).numValues()
       : m_trainInstances.attribute(att1).numValues() + 1;
 
     int ny = (!m_missingSeparate)
-      ? m_trainInstances.attribute(att2).numValues() 
+      ? m_trainInstances.attribute(att2).numValues()
       : m_trainInstances.attribute(att2).numValues() + 1;
 
     double[][] prior_nom = new double[nx][ny];
@@ -819,7 +842,7 @@ public class CfsSubsetEval
       }
     }
 
-    // calculate frequencies (and means) of the values of the nominal 
+    // calculate frequencies (and means) of the values of the nominal
     // attribute
     for (i = 0; i < m_numInstances; i++) {
       inst = m_trainInstances.instance(i);
@@ -833,7 +856,7 @@ public class CfsSubsetEval
         }
       }
       else {
-        ii = (int)inst.value(att1);
+        ii = (int) inst.value(att1);
       }
 
       if (inst.isMissing(att2)) {
@@ -845,7 +868,7 @@ public class CfsSubsetEval
         }
       }
       else {
-        jj = (int)inst.value(att2);
+        jj = (int) inst.value(att2);
       }
 
       // increment freq for nominal
@@ -860,52 +883,52 @@ public class CfsSubsetEval
       for (j = 0; j < ny; j++) {
         if (inst.isMissing(att2)) {
           if (!m_missingSeparate) {
-            temp2 = (j == my)? 1.0 : 0.0;
+            temp2 = (j == my) ? 1.0 : 0.0;
           }
           else {
-            temp2 = (j == (ny - 1))? 1.0 : 0.0;
+            temp2 = (j == (ny - 1)) ? 1.0 : 0.0;
           }
         }
         else {
-          temp2 = (j == inst.value(att2))? 1.0 : 0.0;
+          temp2 = (j == inst.value(att2)) ? 1.0 : 0.0;
         }
 
-        diff2 = (temp2 - (sumy[j]/m_numInstances));
-        stdvsy[j] += (diff2*diff2);
+        diff2 = (temp2 - (sumy[j] / m_numInstances));
+        stdvsy[j] += (diff2 * diff2);
       }
 
-      // 
+      //
       for (i = 0; i < nx; i++) {
         if (inst.isMissing(att1)) {
           if (!m_missingSeparate) {
-            temp1 = (i == mx)? 1.0 : 0.0;
+            temp1 = (i == mx) ? 1.0 : 0.0;
           }
           else {
-            temp1 = (i == (nx - 1))? 1.0 : 0.0;
+            temp1 = (i == (nx - 1)) ? 1.0 : 0.0;
           }
         }
         else {
-          temp1 = (i == inst.value(att1))? 1.0 : 0.0;
+          temp1 = (i == inst.value(att1)) ? 1.0 : 0.0;
         }
 
-        diff1 = (temp1 - (sumx[i]/m_numInstances));
-        stdvsx[i] += (diff1*diff1);
+        diff1 = (temp1 - (sumx[i] / m_numInstances));
+        stdvsx[i] += (diff1 * diff1);
 
         for (j = 0; j < ny; j++) {
           if (inst.isMissing(att2)) {
             if (!m_missingSeparate) {
-              temp2 = (j == my)? 1.0 : 0.0;
+              temp2 = (j == my) ? 1.0 : 0.0;
             }
             else {
-              temp2 = (j == (ny - 1))? 1.0 : 0.0;
+              temp2 = (j == (ny - 1)) ? 1.0 : 0.0;
             }
           }
           else {
-            temp2 = (j == inst.value(att2))? 1.0 : 0.0;
+            temp2 = (j == inst.value(att2)) ? 1.0 : 0.0;
           }
 
-          diff2 = (temp2 - (sumy[j]/m_numInstances));
-          covs[i][j] += (diff1*diff2);
+          diff2 = (temp2 - (sumy[j] / m_numInstances));
+          covs[i][j] += (diff1 * diff2);
         }
       }
     }
@@ -913,23 +936,24 @@ public class CfsSubsetEval
     // calculate weighted correlation
     for (i = 0; i < nx; i++) {
       for (j = 0; j < ny; j++) {
-        if ((stdvsx[i]*stdvsy[j]) > 0.0) {
-          //System.out.println("Stdv :"+stdvs_nom[i]);
-          rr = (covs[i][j]/(Math.sqrt(stdvsx[i]*stdvsy[j])));
+        if ((stdvsx[i] * stdvsy[j]) > 0.0) {
+          // System.out.println("Stdv :"+stdvs_nom[i]);
+          rr = (covs[i][j] / (Math.sqrt(stdvsx[i] * stdvsy[j])));
 
           if (rr < 0.0) {
             rr = -rr;
           }
 
-          r += ((prior_nom[i][j]/m_numInstances)*rr);
+          r += ((prior_nom[i][j] / m_numInstances) * rr);
         }
         // if there is zero variance for either of the categorical atts then if
         // neither is the class then make this
-        // correlation at this level maximally bad i.e. 1.0. If either is 
+        // correlation at this level maximally bad i.e. 1.0. If either is
         // the class then maximally bad correlation is 0.0
-        else {if (att1 != m_classIndex && att2 != m_classIndex) {
-          r += ((prior_nom[i][j]/m_numInstances)*1.0);
-        }
+        else {
+          if (att1 != m_classIndex && att2 != m_classIndex) {
+            r += ((prior_nom[i][j] / m_numInstances) * 1.0);
+          }
         }
       }
     }
@@ -937,7 +961,7 @@ public class CfsSubsetEval
     // calculate weighted standard deviations for these attributes
     // (if necessary)
     for (i = 0, temp1 = 0.0; i < nx; i++) {
-      temp1 += ((sumx[i]/m_numInstances)*(stdvsx[i]/m_numInstances));
+      temp1 += ((sumx[i] / m_numInstances) * (stdvsx[i] / m_numInstances));
     }
 
     if (temp1 != 0.0) {
@@ -947,7 +971,7 @@ public class CfsSubsetEval
     }
 
     for (j = 0, temp2 = 0.0; j < ny; j++) {
-      temp2 += ((sumy[j]/m_numInstances)*(stdvsy[j]/m_numInstances));
+      temp2 += ((sumy[j] / m_numInstances) * (stdvsy[j] / m_numInstances));
     }
 
     if (temp2 != 0.0) {
@@ -962,16 +986,16 @@ public class CfsSubsetEval
       }
     }
 
-    return  r;
+    return r;
   }
 
-
   /**
    * returns a string describing CFS
-   *
+   * 
    * @return the description as a string
    */
-  public String toString () {
+  @Override
+  public String toString() {
     StringBuffer text = new StringBuffer();
 
     if (m_trainInstances == null) {
@@ -989,18 +1013,17 @@ public class CfsSubsetEval
       }
     }
 
-    return  text.toString();
+    return text.toString();
   }
 
-
-  private void addLocallyPredictive (BitSet best_group) {
+  private void addLocallyPredictive(BitSet best_group) {
     int i, j;
     boolean done = false;
     boolean ok = true;
     double temp_best = -1.0;
     float corr;
     j = 0;
-    BitSet temp_group = (BitSet)best_group.clone();
+    BitSet temp_group = (BitSet) best_group.clone();
     int larger, smaller;
 
     while (!done) {
@@ -1009,19 +1032,23 @@ public class CfsSubsetEval
       // find best not already in group
       for (i = 0; i < m_numAttribs; i++) {
         if (i > m_classIndex) {
-          larger = i; smaller = m_classIndex;
+          larger = i;
+          smaller = m_classIndex;
         } else {
-          smaller = i; larger = m_classIndex;
+          smaller = i;
+          larger = m_classIndex;
         }
-        /*      int larger = (i > m_classIndex ? i : m_classIndex);
-                int smaller = (i > m_classIndex ? m_classIndex : i); */
+        /*
+         * int larger = (i > m_classIndex ? i : m_classIndex); int smaller = (i
+         * > m_classIndex ? m_classIndex : i);
+         */
         if ((!temp_group.get(i)) && (i != m_classIndex)) {
           if (m_corr_matrix[larger][smaller] == -999) {
             corr = correlate(i, m_classIndex);
             m_corr_matrix[larger][smaller] = corr;
           }
 
-          if (m_corr_matrix[larger][smaller]  > temp_best) {
+          if (m_corr_matrix[larger][smaller] > temp_best) {
             temp_best = m_corr_matrix[larger][smaller];
             j = i;
           }
@@ -1036,15 +1063,18 @@ public class CfsSubsetEval
         temp_group.set(j);
 
         // check the best against correlations with others already
-        // in group 
+        // in group
         for (i = 0; i < m_numAttribs; i++) {
           if (i > j) {
-            larger = i; smaller = j;
+            larger = i;
+            smaller = j;
           } else {
-            larger = j; smaller = i;
+            larger = j;
+            smaller = i;
           }
-          /*  int larger = (i > j ? i : j);
-              int smaller = (i > j ? j : i); */
+          /*
+           * int larger = (i > j ? i : j); int smaller = (i > j ? j : i);
+           */
           if (best_group.get(i)) {
             if (m_corr_matrix[larger][smaller] == -999) {
               corr = correlate(i, j);
@@ -1066,28 +1096,28 @@ public class CfsSubsetEval
     }
   }
 
-
   /**
-   * Calls locallyPredictive in order to include locally predictive
-   * attributes (if requested).
-   *
+   * Calls locallyPredictive in order to include locally predictive attributes
+   * (if requested).
+   * 
    * @param attributeSet the set of attributes found by the search
    * @return a possibly ranked list of postprocessed attributes
    * @throws Exception if postprocessing fails for some reason
    */
-  public int[] postProcess (int[] attributeSet)
+  @Override
+  public int[] postProcess(int[] attributeSet)
     throws Exception {
     int j = 0;
 
     if (!m_locallyPredictive) {
-      //      m_trainInstances = new Instances(m_trainInstances,0);
-      return  attributeSet;
+      m_trainInstances = new Instances(m_trainInstances, 0);
+      return attributeSet;
     }
 
     BitSet bestGroup = new BitSet(m_numAttribs);
 
-    for (int i = 0; i < attributeSet.length; i++) {
-      bestGroup.set(attributeSet[i]);
+    for (int element : attributeSet) {
+      bestGroup.set(element);
     }
 
     addLocallyPredictive(bestGroup);
@@ -1108,33 +1138,33 @@ public class CfsSubsetEval
       }
     }
 
-    //    m_trainInstances = new Instances(m_trainInstances,0);
-    return  newSet;
+    m_trainInstances = new Instances(m_trainInstances, 0);
+    return newSet;
   }
 
-
-  protected void resetOptions () {
+  protected void resetOptions() {
     m_trainInstances = null;
     m_missingSeparate = false;
     m_locallyPredictive = true;
     m_c_Threshold = 0.0;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6133 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
   }
 
   /**
    * Main method for testing this class.
-   *
+   * 
    * @param args the options
    */
-  public static void main (String[] args) {
+  public static void main(String[] args) {
     runEvaluator(new CfsSubsetEval(), args);
   }
 }
diff --git a/src/main/java/weka/attributeSelection/ConsistencySubsetEval.java b/src/main/java/weka/attributeSelection/ConsistencySubsetEval.java
index 8939ba8..8091e2a 100644
--- a/src/main/java/weka/attributeSelection/ConsistencySubsetEval.java
+++ b/src/main/java/weka/attributeSelection/ConsistencySubsetEval.java
@@ -20,43 +20,49 @@
  *
  */
 
-package  weka.attributeSelection;
+package weka.attributeSelection;
+
+import java.io.Serializable;
+import java.util.BitSet;
+import java.util.Enumeration;
+import java.util.Hashtable;
 
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.Instance;
 import weka.core.Instances;
 import weka.core.RevisionHandler;
 import weka.core.RevisionUtils;
 import weka.core.TechnicalInformation;
-import weka.core.TechnicalInformationHandler;
-import weka.core.Utils;
-import weka.core.Capabilities.Capability;
 import weka.core.TechnicalInformation.Field;
 import weka.core.TechnicalInformation.Type;
+import weka.core.TechnicalInformationHandler;
+import weka.core.Utils;
 import weka.filters.Filter;
 import weka.filters.supervised.attribute.Discretize;
 
-import java.io.Serializable;
-import java.util.BitSet;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-/** 
- <!-- globalinfo-start -->
- * ConsistencySubsetEval :<br/>
+/**
+ * <!-- globalinfo-start --> ConsistencySubsetEval :<br/>
  * <br/>
- * Evaluates the worth of a subset of attributes by the level of consistency in the class values when the training instances are projected onto the subset of attributes. <br/>
+ * Evaluates the worth of a subset of attributes by the level of consistency in
+ * the class values when the training instances are projected onto the subset of
+ * attributes. <br/>
  * <br/>
- * Consistency of any subset can never be lower than that of the full set of attributes, hence the usual practice is to use this subset evaluator in conjunction with a Random or Exhaustive search which looks for the smallest subset with consistency equal to that of the full set of attributes.<br/>
+ * Consistency of any subset can never be lower than that of the full set of
+ * attributes, hence the usual practice is to use this subset evaluator in
+ * conjunction with a Random or Exhaustive search which looks for the smallest
+ * subset with consistency equal to that of the full set of attributes.<br/>
  * <br/>
  * For more information see:<br/>
  * <br/>
- * H. Liu, R. Setiono: A probabilistic approach to feature selection - A filter solution. In: 13th International Conference on Machine Learning, 319-327, 1996.
+ * H. Liu, R. Setiono: A probabilistic approach to feature selection - A filter
+ * solution. In: 13th International Conference on Machine Learning, 319-327,
+ * 1996.
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- technical-bibtex-start -->
- * BibTeX:
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- technical-bibtex-start --> BibTeX:
+ * 
  * <pre>
  * @inproceedings{Liu1996,
  *    author = {H. Liu and R. Setiono},
@@ -67,20 +73,20 @@ import java.util.Hashtable;
  * }
  * </pre>
  * <p/>
- <!-- technical-bibtex-end -->
- *
+ * <!-- technical-bibtex-end -->
+ * 
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 5511 $
+ * @version $Revision: 11219 $
  * @see Discretize
  */
-public class ConsistencySubsetEval 
+public class ConsistencySubsetEval
   extends ASEvaluation
   implements SubsetEvaluator,
-             TechnicalInformationHandler {
-  
+  TechnicalInformationHandler {
+
   /** for serialization */
   static final long serialVersionUID = -2880323763295270402L;
-  
+
   /** training instances */
   private Instances m_trainInstances;
 
@@ -102,24 +108,24 @@ public class ConsistencySubsetEval
   /**
    * Class providing keys to the hash table.
    */
-  public class hashKey 
+  public class hashKey
     implements Serializable, RevisionHandler {
-    
+
     /** for serialization */
     static final long serialVersionUID = 6144138512017017408L;
-    
+
     /** Array of attribute values for an instance */
-    private double [] attributes;
-    
+    private final double[] attributes;
+
     /** True for an index if the corresponding attribute value is missing. */
-    private boolean [] missing;
+    private final boolean[] missing;
 
     /** The key */
     private int key;
 
     /**
      * Constructor for a hashKey
-     *
+     * 
      * @param t an instance from which to generate a key
      * @param numAtts the number of attributes
      * @throws Exception if something goes wrong
@@ -130,22 +136,22 @@ public class ConsistencySubsetEval
       int cindex = t.classIndex();
 
       key = -999;
-      attributes = new double [numAtts];
-      missing = new boolean [numAtts];
-      for (i=0;i<numAtts;i++) {
-	if (i == cindex) {
-	  missing[i] = true;
-	} else {
-	  if ((missing[i] = t.isMissing(i)) == false) {
-	    attributes[i] = t.value(i);
-	  }
-	}
+      attributes = new double[numAtts];
+      missing = new boolean[numAtts];
+      for (i = 0; i < numAtts; i++) {
+        if (i == cindex) {
+          missing[i] = true;
+        } else {
+          if ((missing[i] = t.isMissing(i)) == false) {
+            attributes[i] = t.value(i);
+          }
+        }
       }
     }
 
     /**
      * Convert a hash entry to a string
-     *
+     * 
      * @param t the set of instances
      * @param maxColWidth width to make the fields
      * @return the hash entry as string
@@ -155,213 +161,222 @@ public class ConsistencySubsetEval
       int i;
       int cindex = t.classIndex();
       StringBuffer text = new StringBuffer();
-      
-      for (i=0;i<attributes.length;i++) {
-	if (i != cindex) {
-	  if (missing[i]) {
-	    text.append("?");
-	    for (int j=0;j<maxColWidth;j++) {
-	      text.append(" ");
-	    }
-	  } else {
-	    String ss = t.attribute(i).value((int)attributes[i]);
-	    StringBuffer sb = new StringBuffer(ss);
-	    
-	    for (int j=0;j < (maxColWidth-ss.length()+1); j++) {
-		sb.append(" ");
-	    }
-	    text.append(sb);
-	  }
-	}
+
+      for (i = 0; i < attributes.length; i++) {
+        if (i != cindex) {
+          if (missing[i]) {
+            text.append("?");
+            for (int j = 0; j < maxColWidth; j++) {
+              text.append(" ");
+            }
+          } else {
+            String ss = t.attribute(i).value((int) attributes[i]);
+            StringBuffer sb = new StringBuffer(ss);
+
+            for (int j = 0; j < (maxColWidth - ss.length() + 1); j++) {
+              sb.append(" ");
+            }
+            text.append(sb);
+          }
+        }
       }
       return text.toString();
     }
 
     /**
      * Constructor for a hashKey
-     *
+     * 
      * @param t an array of feature values
      */
-    public hashKey(double [] t) {
+    public hashKey(double[] t) {
 
       int i;
       int l = t.length;
 
       key = -999;
-      attributes = new double [l];
-      missing = new boolean [l];
-      for (i=0;i<l;i++) {
-	if (t[i] == Double.MAX_VALUE) {
-	  missing[i] = true;
-	} else {
-	  missing[i] = false;
-	  attributes[i] = t[i];
-	}
+      attributes = new double[l];
+      missing = new boolean[l];
+      for (i = 0; i < l; i++) {
+        if (t[i] == Double.MAX_VALUE) {
+          missing[i] = true;
+        } else {
+          missing[i] = false;
+          attributes[i] = t[i];
+        }
       }
     }
-    
+
     /**
      * Calculates a hash code
-     *
+     * 
      * @return the hash code as an integer
      */
+    @Override
     public int hashCode() {
 
       int hv = 0;
-      
-      if (key != -999)
-	return key;
-      for (int i=0;i<attributes.length;i++) {
-	if (missing[i]) {
-	  hv += (i*13);
-	} else {
-	  hv += (i * 5 * (attributes[i]+1));
-	}
+
+      if (key != -999) {
+        return key;
+      }
+      for (int i = 0; i < attributes.length; i++) {
+        if (missing[i]) {
+          hv += (i * 13);
+        } else {
+          hv += (i * 5 * (attributes[i] + 1));
+        }
       }
       if (key == -999) {
-	key = hv;
+        key = hv;
       }
       return hv;
     }
 
     /**
      * Tests if two instances are equal
-     *
+     * 
      * @param b a key to compare with
      * @return true if the objects are equal
      */
+    @Override
     public boolean equals(Object b) {
-      
+
       if ((b == null) || !(b.getClass().equals(this.getClass()))) {
         return false;
       }
       boolean ok = true;
       boolean l;
       if (b instanceof hashKey) {
-	hashKey n = (hashKey)b;
-	for (int i=0;i<attributes.length;i++) {
-	  l = n.missing[i];
-	  if (missing[i] || l) {
-	    if ((missing[i] && !l) || (!missing[i] && l)) {
-	      ok = false;
-	      break;
-	    }
-	  } else {
-	    if (attributes[i] != n.attributes[i]) {
-	      ok = false;
-	      break;
-	    }
-	  }
-	}
+        hashKey n = (hashKey) b;
+        for (int i = 0; i < attributes.length; i++) {
+          l = n.missing[i];
+          if (missing[i] || l) {
+            if ((missing[i] && !l) || (!missing[i] && l)) {
+              ok = false;
+              break;
+            }
+          } else {
+            if (attributes[i] != n.attributes[i]) {
+              ok = false;
+              break;
+            }
+          }
+        }
       } else {
-	return false;
+        return false;
       }
       return ok;
     }
-    
+
     /**
      * Prints the hash code
      */
     public void print_hash_code() {
-      
-      System.out.println("Hash val: "+hashCode());
+
+      System.out.println("Hash val: " + hashCode());
     }
-    
+
     /**
      * Returns the revision string.
      * 
-     * @return		the revision
+     * @return the revision
      */
+    @Override
     public String getRevision() {
-      return RevisionUtils.extract("$Revision: 5511 $");
+      return RevisionUtils.extract("$Revision: 11219 $");
     }
   }
 
   /**
    * Returns a string describing this search method
-   * @return a description of the search suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the search suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "ConsistencySubsetEval :\n\nEvaluates the worth of a subset of "
-      +"attributes by the level of consistency in the class values when the "
-      +"training instances are projected onto the subset of attributes. "
-      +"\n\nConsistency of any subset can never be lower than that of the "
-      +"full set of attributes, hence the usual practice is to use this "
-      +"subset evaluator in conjunction with a Random or Exhaustive search "
-      +"which looks for the smallest subset with consistency equal to that "
-      +"of the full set of attributes.\n\n"
+      + "attributes by the level of consistency in the class values when the "
+      + "training instances are projected onto the subset of attributes. "
+      + "\n\nConsistency of any subset can never be lower than that of the "
+      + "full set of attributes, hence the usual practice is to use this "
+      + "subset evaluator in conjunction with a Random or Exhaustive search "
+      + "which looks for the smallest subset with consistency equal to that "
+      + "of the full set of attributes.\n\n"
       + "For more information see:\n\n"
       + getTechnicalInformation().toString();
   }
 
   /**
-   * Returns an instance of a TechnicalInformation object, containing 
-   * detailed information about the technical background of this class,
-   * e.g., paper reference or book this class is based on.
+   * Returns an instance of a TechnicalInformation object, containing detailed
+   * information about the technical background of this class, e.g., paper
+   * reference or book this class is based on.
    * 
    * @return the technical information about this class
    */
+  @Override
   public TechnicalInformation getTechnicalInformation() {
-    TechnicalInformation 	result;
-    
+    TechnicalInformation result;
+
     result = new TechnicalInformation(Type.INPROCEEDINGS);
     result.setValue(Field.AUTHOR, "H. Liu and R. Setiono");
-    result.setValue(Field.TITLE, "A probabilistic approach to feature selection - A filter solution");
-    result.setValue(Field.BOOKTITLE, "13th International Conference on Machine Learning");
+    result.setValue(Field.TITLE,
+      "A probabilistic approach to feature selection - A filter solution");
+    result.setValue(Field.BOOKTITLE,
+      "13th International Conference on Machine Learning");
     result.setValue(Field.YEAR, "1996");
     result.setValue(Field.PAGES, "319-327");
-    
+
     return result;
   }
 
   /**
    * Constructor. Calls restOptions to set default options
    **/
-  public ConsistencySubsetEval () {
+  public ConsistencySubsetEval() {
     resetOptions();
   }
 
   /**
    * reset to defaults
    */
-  private void resetOptions () {
+  private void resetOptions() {
     m_trainInstances = null;
   }
 
   /**
    * Returns the capabilities of this evaluator.
-   *
-   * @return            the capabilities of this evaluator
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this evaluator
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
     result.disableAll();
-    
+
     // attributes
     result.enable(Capability.NOMINAL_ATTRIBUTES);
     result.enable(Capability.NUMERIC_ATTRIBUTES);
     result.enable(Capability.DATE_ATTRIBUTES);
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enable(Capability.NOMINAL_CLASS);
     result.enable(Capability.MISSING_CLASS_VALUES);
-    
+
     return result;
   }
 
   /**
-   * Generates a attribute evaluator. Has to initialize all fields of the 
+   * Generates a attribute evaluator. Has to initialize all fields of the
    * evaluator that are not being set via options.
-   *
-   * @param data set of instances serving as training data 
-   * @throws Exception if the evaluator has not been 
-   * generated successfully
+   * 
+   * @param data set of instances serving as training data
+   * @throws Exception if the evaluator has not been generated successfully
    */
-  public void buildEvaluator (Instances data) throws Exception {
-    
+  @Override
+  public void buildEvaluator(Instances data) throws Exception {
+
     // can evaluator handle data?
     getCapabilities().testWithFail(data);
 
@@ -379,45 +394,45 @@ public class ConsistencySubsetEval
 
   /**
    * Evaluates a subset of attributes
-   *
-   * @param subset a bitset representing the attribute subset to be 
-   * evaluated 
+   * 
+   * @param subset a bitset representing the attribute subset to be evaluated
    * @throws Exception if the subset could not be evaluated
    */
-  public double evaluateSubset (BitSet subset) throws Exception {
-    int [] fs;
+  @Override
+  public double evaluateSubset(BitSet subset) throws Exception {
+    int[] fs;
     int i;
     int count = 0;
 
-    for (i=0;i<m_numAttribs;i++) {
+    for (i = 0; i < m_numAttribs; i++) {
       if (subset.get(i)) {
-	count++;
+        count++;
       }
     }
 
-    double [] instArray = new double[count];
+    double[] instArray = new double[count];
     int index = 0;
     fs = new int[count];
-    for (i=0;i<m_numAttribs;i++) {
+    for (i = 0; i < m_numAttribs; i++) {
       if (subset.get(i)) {
-	fs[index++] = i;
+        fs[index++] = i;
       }
     }
-    
+
     // create new hash table
-    m_table = new Hashtable((int)(m_numInstances * 1.5));
-    
-    for (i=0;i<m_numInstances;i++) {
+    m_table = new Hashtable((int) (m_numInstances * 1.5));
+
+    for (i = 0; i < m_numInstances; i++) {
       Instance inst = m_trainInstances.instance(i);
-      for (int j=0;j<fs.length;j++) {
-	if (fs[j] == m_classIndex) {
-	  throw new Exception("A subset should not contain the class!");
-	}
-	if (inst.isMissing(fs[j])) {
-	  instArray[j] = Double.MAX_VALUE;
-	} else {
-	  instArray[j] = inst.value(fs[j]);
-	}
+      for (int j = 0; j < fs.length; j++) {
+        if (fs[j] == m_classIndex) {
+          throw new Exception("A subset should not contain the class!");
+        }
+        if (inst.isMissing(fs[j])) {
+          instArray[j] = Double.MAX_VALUE;
+        } else {
+          instArray[j] = inst.value(fs[j]);
+        }
       }
       insertIntoTable(inst, instArray);
     }
@@ -427,59 +442,59 @@ public class ConsistencySubsetEval
 
   /**
    * calculates the level of consistency in a dataset using a subset of
-   * features. The consistency of a hash table entry is the total number
-   * of instances hashed to that location minus the number of instances in
-   * the largest class hashed to that location. The total consistency is
-   * 1.0 minus the sum of the individual consistencies divided by the
-   * total number of instances.
+   * features. The consistency of a hash table entry is the total number of
+   * instances hashed to that location minus the number of instances in the
+   * largest class hashed to that location. The total consistency is 1.0 minus
+   * the sum of the individual consistencies divided by the total number of
+   * instances.
+   * 
    * @return the consistency of the hash table as a value between 0 and 1.
    */
   private double consistencyCount() {
     Enumeration e = m_table.keys();
-    double [] classDist;
+    double[] classDist;
     double count = 0.0;
-    
+
     while (e.hasMoreElements()) {
-      hashKey tt = (hashKey)e.nextElement();
-      classDist = (double []) m_table.get(tt);
+      hashKey tt = (hashKey) e.nextElement();
+      classDist = (double[]) m_table.get(tt);
       count += Utils.sum(classDist);
       int max = Utils.maxIndex(classDist);
       count -= classDist[max];
     }
 
-    count /= (double)m_numInstances;
+    count /= m_numInstances;
     return (1.0 - count);
   }
 
   /**
    * Inserts an instance into the hash table
-   *
+   * 
    * @param inst instance to be inserted
-   * @param instA the instance to be inserted as an array of attribute
-   * values.
+   * @param instA the instance to be inserted as an array of attribute values.
    * @throws Exception if the instance can't be inserted
    */
-  private void insertIntoTable(Instance inst, double [] instA)
-       throws Exception {
+  private void insertIntoTable(Instance inst, double[] instA)
+    throws Exception {
 
-    double [] tempClassDist2;
-    double [] newDist;
+    double[] tempClassDist2;
+    double[] newDist;
     hashKey thekey;
 
     thekey = new hashKey(instA);
 
     // see if this one is already in the table
-    tempClassDist2 = (double []) m_table.get(thekey);
+    tempClassDist2 = (double[]) m_table.get(thekey);
     if (tempClassDist2 == null) {
-      newDist = new double [m_trainInstances.classAttribute().numValues()];
-      newDist[(int)inst.classValue()] = inst.weight();
-      
+      newDist = new double[m_trainInstances.classAttribute().numValues()];
+      newDist[(int) inst.classValue()] = inst.weight();
+
       // add to the table
       m_table.put(thekey, newDist);
-    } else { 
+    } else {
       // update the distribution for this instance
-      tempClassDist2[(int)inst.classValue()]+=inst.weight();
-      
+      tempClassDist2[(int) inst.classValue()] += inst.weight();
+
       // update the table
       m_table.put(thekey, tempClassDist2);
     }
@@ -487,8 +502,10 @@ public class ConsistencySubsetEval
 
   /**
    * returns a description of the evaluator
+   * 
    * @return a description of the evaluator as a String.
    */
+  @Override
   public String toString() {
     StringBuffer text = new StringBuffer();
 
@@ -501,22 +518,32 @@ public class ConsistencySubsetEval
 
     return text.toString();
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5511 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
+  }
+
+  @Override
+  public int[] postProcess(int[] attributeSet) {
+
+    // save memory
+    m_trainInstances = new Instances(m_trainInstances, 0);
+
+    return attributeSet;
   }
 
   /**
    * Main method for testing this class.
-   *
+   * 
    * @param args the options
    */
-  public static void main (String[] args) {
+  public static void main(String[] args) {
     runEvaluator(new ConsistencySubsetEval(), args);
   }
 }
diff --git a/src/main/java/weka/attributeSelection/GainRatioAttributeEval.java b/src/main/java/weka/attributeSelection/GainRatioAttributeEval.java
index 496272c..f5cc321 100644
--- a/src/main/java/weka/attributeSelection/GainRatioAttributeEval.java
+++ b/src/main/java/weka/attributeSelection/GainRatioAttributeEval.java
@@ -22,7 +22,11 @@
 
 package weka.attributeSelection;
 
+import java.util.Enumeration;
+import java.util.Vector;
+
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.ContingencyTables;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -30,39 +34,37 @@ import weka.core.Option;
 import weka.core.OptionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
-import weka.core.Capabilities.Capability;
 import weka.filters.Filter;
 import weka.filters.supervised.attribute.Discretize;
 
-import java.util.Enumeration;
-import java.util.Vector;
-
-/** 
- <!-- globalinfo-start -->
- * GainRatioAttributeEval :<br/>
+/**
+ * <!-- globalinfo-start --> GainRatioAttributeEval :<br/>
  * <br/>
- * Evaluates the worth of an attribute by measuring the gain ratio with respect to the class.<br/>
+ * Evaluates the worth of an attribute by measuring the gain ratio with respect
+ * to the class.<br/>
  * <br/>
  * GainR(Class, Attribute) = (H(Class) - H(Class | Attribute)) / H(Attribute).<br/>
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- globalinfo-end -->
  * 
- * <pre> -M
- *  treat missing values as a seperate value.</pre>
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -M
+ *  treat missing values as a seperate value.
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 9692 $
+ * @version $Revision: 11219 $
  * @see Discretize
  */
 public class GainRatioAttributeEval
   extends ASEvaluation
   implements AttributeEvaluator, OptionHandler {
-  
+
   /** for serialization */
   static final long serialVersionUID = -8504656625598579926L;
 
@@ -86,92 +88,98 @@ public class GainRatioAttributeEval
 
   /**
    * Returns a string describing this attribute evaluator
-   * @return a description of the evaluator suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the evaluator suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "GainRatioAttributeEval :\n\nEvaluates the worth of an attribute "
-      +"by measuring the gain ratio with respect to the class.\n\n"
-      +"GainR(Class, Attribute) = (H(Class) - H(Class | Attribute)) / "
-      +"H(Attribute).\n";
+      + "by measuring the gain ratio with respect to the class.\n\n"
+      + "GainR(Class, Attribute) = (H(Class) - H(Class | Attribute)) / "
+      + "H(Attribute).\n";
   }
 
   /**
    * Constructor
    */
-  public GainRatioAttributeEval () {
+  public GainRatioAttributeEval() {
     resetOptions();
   }
 
-
   /**
    * Returns an enumeration describing the available options.
+   * 
    * @return an enumeration of all the available options.
    **/
-  public Enumeration listOptions () {
+  @Override
+  public Enumeration listOptions() {
     Vector newVector = new Vector(1);
-    newVector.addElement(new Option("\ttreat missing values as a seperate " 
-				    + "value.", "M", 0, "-M"));
-    return  newVector.elements();
+    newVector.addElement(new Option("\ttreat missing values as a seperate "
+      + "value.", "M", 0, "-M"));
+    return newVector.elements();
   }
 
-
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
+   * 
+   * <pre>
+   * -M
+   *  treat missing values as a seperate value.
+   * </pre>
    * 
-   * <pre> -M
-   *  treat missing values as a seperate value.</pre>
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    **/
-  public void setOptions (String[] options)
+  @Override
+  public void setOptions(String[] options)
     throws Exception {
     resetOptions();
     setMissingMerge(!(Utils.getFlag('M', options)));
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String missingMergeTipText() {
     return "Distribute counts for missing values. Counts are distributed "
-      +"across other values in proportion to their frequency. Otherwise, "
-      +"missing is treated as a separate value.";
+      + "across other values in proportion to their frequency. Otherwise, "
+      + "missing is treated as a separate value.";
   }
 
   /**
    * distribute the counts for missing values across observed values
-   *
+   * 
    * @param b true=distribute missing values.
    */
-  public void setMissingMerge (boolean b) {
+  public void setMissingMerge(boolean b) {
     m_missing_merge = b;
   }
 
-
   /**
    * get whether missing values are being distributed or not
-   *
+   * 
    * @return true if missing values are being distributed.
    */
-  public boolean getMissingMerge () {
-    return  m_missing_merge;
+  public boolean getMissingMerge() {
+    return m_missing_merge;
   }
 
-
   /**
    * Gets the current settings of WrapperSubsetEval.
+   * 
    * @return an array of strings suitable for passing to setOptions()
    */
-  public String[] getOptions () {
+  @Override
+  public String[] getOptions() {
     String[] options = new String[1];
     int current = 0;
 
@@ -183,43 +191,44 @@ public class GainRatioAttributeEval
       options[current++] = "";
     }
 
-    return  options;
+    return options;
   }
 
   /**
    * Returns the capabilities of this evaluator.
-   *
-   * @return            the capabilities of this evaluator
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this evaluator
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
     result.disableAll();
-    
+
     // attributes
     result.enable(Capability.NOMINAL_ATTRIBUTES);
     result.enable(Capability.NUMERIC_ATTRIBUTES);
     result.enable(Capability.DATE_ATTRIBUTES);
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enable(Capability.NOMINAL_CLASS);
     result.enable(Capability.MISSING_CLASS_VALUES);
-    
+
     return result;
   }
 
   /**
-   * Initializes a gain ratio attribute evaluator.
-   * Discretizes all attributes that are numeric.
-   *
-   * @param data set of instances serving as training data 
-   * @throws Exception if the evaluator has not been 
-   * generated successfully
+   * Initializes a gain ratio attribute evaluator. Discretizes all attributes
+   * that are numeric.
+   * 
+   * @param data set of instances serving as training data
+   * @throws Exception if the evaluator has not been generated successfully
    */
-  public void buildEvaluator (Instances data)
+  @Override
+  public void buildEvaluator(Instances data)
     throws Exception {
-    
+
     // can evaluator handle data?
     getCapabilities().testWithFail(data);
 
@@ -234,25 +243,24 @@ public class GainRatioAttributeEval
     m_numClasses = m_trainInstances.attribute(m_classIndex).numValues();
   }
 
-
   /**
    * reset options to default values
    */
-  protected void resetOptions () {
+  protected void resetOptions() {
     m_trainInstances = null;
     m_missing_merge = true;
   }
 
-
   /**
-   * evaluates an individual attribute by measuring the gain ratio
-   * of the class given the attribute.
-   *
+   * evaluates an individual attribute by measuring the gain ratio of the class
+   * given the attribute.
+   * 
    * @param attribute the index of the attribute to be evaluated
    * @return the gain ratio
    * @throws Exception if the attribute could not be evaluated
    */
-  public double evaluateAttribute (int attribute)
+  @Override
+  public double evaluateAttribute(int attribute)
     throws Exception {
     int i, j, ii, jj;
     int ni, nj;
@@ -285,14 +293,14 @@ public class GainRatioAttributeEval
         ii = ni - 1;
       }
       else {
-        ii = (int)inst.value(attribute);
+        ii = (int) inst.value(attribute);
       }
 
       if (inst.isMissing(m_classIndex)) {
         jj = nj - 1;
       }
       else {
-        jj = (int)inst.value(m_classIndex);
+        jj = (int) inst.value(m_classIndex);
       }
 
       counts[ii][jj] += inst.weight();
@@ -318,9 +326,9 @@ public class GainRatioAttributeEval
     }
 
     // distribute missing counts
-    if (m_missing_merge && 
-	(sumi[ni-1] < sum) && 
-	(sumj[nj-1] < sum)) {
+    if (m_missing_merge &&
+      (sumi[ni - 1] < sum) &&
+      (sumj[nj - 1] < sum)) {
       double[] i_copy = new double[sumi.length];
       double[] j_copy = new double[sumj.length];
       double[][] counts_copy = new double[sumi.length][sumj.length];
@@ -331,15 +339,15 @@ public class GainRatioAttributeEval
 
       System.arraycopy(sumi, 0, i_copy, 0, sumi.length);
       System.arraycopy(sumj, 0, j_copy, 0, sumj.length);
-      double total_missing = (sumi[ni - 1] + sumj[nj - 1] - 
-			      counts[ni - 1][nj - 1]);
+      double total_missing = (sumi[ni - 1] + sumj[nj - 1] -
+        counts[ni - 1][nj - 1]);
 
       // do the missing i's
       if (sumi[ni - 1] > 0.0) {
         for (j = 0; j < nj - 1; j++) {
           if (counts[ni - 1][j] > 0.0) {
             for (i = 0; i < ni - 1; i++) {
-              temp = ((i_copy[i]/(sum - i_copy[ni - 1]))*counts[ni - 1][j]);
+              temp = ((i_copy[i] / (sum - i_copy[ni - 1])) * counts[ni - 1][j]);
               counts[i][j] += temp;
               sumi[i] += temp;
             }
@@ -356,7 +364,7 @@ public class GainRatioAttributeEval
         for (i = 0; i < ni - 1; i++) {
           if (counts[i][nj - 1] > 0.0) {
             for (j = 0; j < nj - 1; j++) {
-              temp = ((j_copy[j]/(sum - j_copy[nj - 1]))*counts[i][nj - 1]);
+              temp = ((j_copy[j] / (sum - j_copy[nj - 1])) * counts[i][nj - 1]);
               counts[i][j] += temp;
               sumj[j] += temp;
             }
@@ -369,11 +377,11 @@ public class GainRatioAttributeEval
       sumj[nj - 1] = 0.0;
 
       // do the both missing
-      if (counts[ni - 1][nj - 1] > 0.0  && total_missing < sum) {
+      if (counts[ni - 1][nj - 1] > 0.0 && total_missing < sum) {
         for (i = 0; i < ni - 1; i++) {
           for (j = 0; j < nj - 1; j++) {
-            temp = (counts_copy[i][j]/(sum - total_missing)) * 
-	      counts_copy[ni - 1][nj - 1];
+            temp = (counts_copy[i][j] / (sum - total_missing)) *
+              counts_copy[ni - 1][nj - 1];
             counts[i][j] += temp;
             sumi[i] += temp;
             sumj[j] += temp;
@@ -384,15 +392,16 @@ public class GainRatioAttributeEval
       }
     }
 
-    return  ContingencyTables.gainRatio(counts);
+    return ContingencyTables.gainRatio(counts);
   }
 
-
   /**
    * Return a description of the evaluator
+   * 
    * @return description as a string
    */
-  public String toString () {
+  @Override
+  public String toString() {
     StringBuffer text = new StringBuffer();
 
     if (m_trainInstances == null) {
@@ -407,25 +416,34 @@ public class GainRatioAttributeEval
     }
 
     text.append("\n");
-    return  text.toString();
+    return text.toString();
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 9692 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
+  }
+
+  @Override
+  public int[] postProcess(int[] attributeSet) {
+
+    // save memory
+    m_trainInstances = new Instances(m_trainInstances, 0);
+
+    return attributeSet;
   }
 
   /**
    * Main method.
-   *
-   * @param args the options
-   * -t training file
+   * 
+   * @param args the options -t training file
    */
-  public static void main (String[] args) {
+  public static void main(String[] args) {
     runEvaluator(new GainRatioAttributeEval(), args);
   }
 }
diff --git a/src/main/java/weka/attributeSelection/GreedyStepwise.java b/src/main/java/weka/attributeSelection/GreedyStepwise.java
index 8e49545..b724b5b 100644
--- a/src/main/java/weka/attributeSelection/GreedyStepwise.java
+++ b/src/main/java/weka/attributeSelection/GreedyStepwise.java
@@ -22,6 +22,10 @@
 
 package weka.attributeSelection;
 
+import java.util.BitSet;
+import java.util.Enumeration;
+import java.util.Vector;
+
 import weka.core.Instances;
 import weka.core.Option;
 import weka.core.OptionHandler;
@@ -29,70 +33,82 @@ import weka.core.Range;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
 
-import java.util.BitSet;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/** 
- <!-- globalinfo-start -->
- * GreedyStepwise :<br/>
+/**
+ * <!-- globalinfo-start --> GreedyStepwise :<br/>
  * <br/>
- * Performs a greedy forward or backward search through the space of attribute subsets. May start with no/all attributes or from an arbitrary point in the space. Stops when the addition/deletion of any remaining attributes results in a decrease in evaluation. Can also produce a ranked list of attributes by traversing the space from one side to the other and recording the order that attributes are selected.<br/>
+ * Performs a greedy forward or backward search through the space of attribute
+ * subsets. May start with no/all attributes or from an arbitrary point in the
+ * space. Stops when the addition/deletion of any remaining attributes results
+ * in a decrease in evaluation. Can also produce a ranked list of attributes by
+ * traversing the space from one side to the other and recording the order that
+ * attributes are selected.<br/>
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -C
- *  Use conservative forward search</pre>
+ * <pre>
+ * -C
+ *  Use conservative forward search
+ * </pre>
  * 
- * <pre> -B
+ * <pre>
+ * -B
  *  Use a backward search instead of a
- *  forward one.</pre>
+ *  forward one.
+ * </pre>
  * 
- * <pre> -P <start set>
+ * <pre>
+ * -P <start set>
  *  Specify a starting set of attributes.
- *  Eg. 1,3,5-7.</pre>
+ *  Eg. 1,3,5-7.
+ * </pre>
  * 
- * <pre> -R
- *  Produce a ranked list of attributes.</pre>
+ * <pre>
+ * -R
+ *  Produce a ranked list of attributes.
+ * </pre>
  * 
- * <pre> -T <threshold>
+ * <pre>
+ * -T <threshold>
  *  Specify a theshold by which attributes
  *  may be discarded from the ranking.
- *  Use in conjuction with -R</pre>
+ *  Use in conjuction with -R
+ * </pre>
  * 
- * <pre> -N <num to select>
- *  Specify number of attributes to select</pre>
+ * <pre>
+ * -N <num to select>
+ *  Specify number of attributes to select
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * @author Mark Hall
- * @version $Revision: 7267 $
+ * @version $Revision: 11229 $
  */
-public class GreedyStepwise 
-  extends ASSearch 
+public class GreedyStepwise
+  extends ASSearch
   implements RankedOutputSearch, StartSetHandler, OptionHandler {
-  
+
   /** for serialization */
   static final long serialVersionUID = -6312951970168325471L;
 
   /** does the data have a class */
   protected boolean m_hasClass;
- 
+
   /** holds the class index */
   protected int m_classIndex;
- 
+
   /** number of attributes in the data */
   protected int m_numAttribs;
 
   /** true if the user has requested a ranked list of attributes */
   protected boolean m_rankingRequested;
 
-  /** 
-   * go from one side of the search space to the other in order to generate
-   * a ranking
+  /**
+   * go from one side of the search space to the other in order to generate a
+   * ranking
    */
   protected boolean m_doRank;
 
@@ -100,13 +116,15 @@ public class GreedyStepwise
   protected boolean m_doneRanking;
 
   /**
-   * A threshold by which to discard attributes---used by the
-   * AttributeSelection module
+   * A threshold by which to discard attributes---used by the AttributeSelection
+   * module
    */
   protected double m_threshold;
 
-  /** The number of attributes to select. -1 indicates that all attributes
-      are to be retained. Has precedence over m_threshold */
+  /**
+   * The number of attributes to select. -1 indicates that all attributes are to
+   * be retained. Has precedence over m_threshold
+   */
   protected int m_numToSelect = -1;
 
   protected int m_calculatedNumToSelect;
@@ -115,7 +133,7 @@ public class GreedyStepwise
   protected double m_bestMerit;
 
   /** a ranked list of attribute indexes */
-  protected double [][] m_rankedAtts;
+  protected double[][] m_rankedAtts;
   protected int m_rankedSoFar;
 
   /** the best subset found */
@@ -128,19 +146,21 @@ public class GreedyStepwise
   protected Range m_startRange;
 
   /** holds an array of starting attributes */
-  protected int [] m_starting;
+  protected int[] m_starting;
 
   /** Use a backwards search instead of a forwards one */
   protected boolean m_backward = false;
 
-  /** If set then attributes will continue to be added during a forward
-      search as long as the merit does not degrade */
+  /**
+   * If set then attributes will continue to be added during a forward search as
+   * long as the merit does not degrade
+   */
   protected boolean m_conservativeSelection = false;
 
   /**
    * Constructor
    */
-  public GreedyStepwise () {
+  public GreedyStepwise() {
     m_threshold = -Double.MAX_VALUE;
     m_doneRanking = false;
     m_startRange = new Range();
@@ -150,24 +170,26 @@ public class GreedyStepwise
 
   /**
    * Returns a string describing this search method
-   * @return a description of the search suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the search suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "GreedyStepwise :\n\nPerforms a greedy forward or backward search "
-      +"through "
-      +"the space of attribute subsets. May start with no/all attributes or from "
-      +"an arbitrary point in the space. Stops when the addition/deletion of any "
-      +"remaining attributes results in a decrease in evaluation. "
-      +"Can also produce a ranked list of "
-      +"attributes by traversing the space from one side to the other and "
-      +"recording the order that attributes are selected.\n";
+      + "through "
+      + "the space of attribute subsets. May start with no/all attributes or from "
+      + "an arbitrary point in the space. Stops when the addition/deletion of any "
+      + "remaining attributes results in a decrease in evaluation. "
+      + "Can also produce a ranked list of "
+      + "attributes by traversing the space from one side to the other and "
+      + "recording the order that attributes are selected.\n";
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String searchBackwardsTipText() {
     return "Search backwards rather than forwards.";
@@ -175,7 +197,7 @@ public class GreedyStepwise
 
   /**
    * Set whether to search backwards instead of forwards
-   *
+   * 
    * @param back true to search backwards
    */
   public void setSearchBackwards(boolean back) {
@@ -187,7 +209,7 @@ public class GreedyStepwise
 
   /**
    * Get whether to search backwards
-   *
+   * 
    * @return true if the search will proceed backwards
    */
   public boolean getSearchBackwards() {
@@ -196,8 +218,9 @@ public class GreedyStepwise
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String thresholdTipText() {
     return "Set threshold by which attributes can be discarded. Default value "
@@ -208,56 +231,63 @@ public class GreedyStepwise
   /**
    * Set the threshold by which the AttributeSelection module can discard
    * attributes.
+   * 
    * @param threshold the threshold.
    */
+  @Override
   public void setThreshold(double threshold) {
     m_threshold = threshold;
   }
 
   /**
-   * Returns the threshold so that the AttributeSelection module can
-   * discard attributes from the ranking.
+   * Returns the threshold so that the AttributeSelection module can discard
+   * attributes from the ranking.
    */
+  @Override
   public double getThreshold() {
     return m_threshold;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String numToSelectTipText() {
     return "Specify the number of attributes to retain. The default value "
-      +"(-1) indicates that all attributes are to be retained. Use either "
-      +"this option or a threshold to reduce the attribute set.";
+      + "(-1) indicates that all attributes are to be retained. Use either "
+      + "this option or a threshold to reduce the attribute set.";
   }
 
   /**
-   * Specify the number of attributes to select from the ranked list
-   * (if generating a ranking). -1
-   * indicates that all attributes are to be retained.
+   * Specify the number of attributes to select from the ranked list (if
+   * generating a ranking). -1 indicates that all attributes are to be retained.
+   * 
    * @param n the number of attributes to retain
    */
+  @Override
   public void setNumToSelect(int n) {
     m_numToSelect = n;
   }
 
   /**
    * Gets the number of attributes to be retained.
+   * 
    * @return the number of attributes to retain
    */
+  @Override
   public int getNumToSelect() {
     return m_numToSelect;
   }
 
   /**
-   * Gets the calculated number of attributes to retain. This is the
-   * actual number of attributes to retain. This is the same as
-   * getNumToSelect if the user specifies a number which is not less
-   * than zero. Otherwise it should be the number of attributes in the
-   * (potentially transformed) data.
+   * Gets the calculated number of attributes to retain. This is the actual
+   * number of attributes to retain. This is the same as getNumToSelect if the
+   * user specifies a number which is not less than zero. Otherwise it should be
+   * the number of attributes in the (potentially transformed) data.
    */
+  @Override
   public int getCalculatedNumToSelect() {
     if (m_numToSelect >= 0) {
       m_calculatedNumToSelect = m_numToSelect;
@@ -267,76 +297,87 @@ public class GreedyStepwise
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String generateRankingTipText() {
     return "Set to true if a ranked list is required.";
   }
-  
+
   /**
    * Records whether the user has requested a ranked list of attributes.
+   * 
    * @param doRank true if ranking is requested
    */
+  @Override
   public void setGenerateRanking(boolean doRank) {
     m_rankingRequested = doRank;
   }
 
   /**
    * Gets whether ranking has been requested. This is used by the
-   * AttributeSelection module to determine if rankedAttributes()
-   * should be called.
+   * AttributeSelection module to determine if rankedAttributes() should be
+   * called.
+   * 
    * @return true if ranking has been requested.
    */
+  @Override
   public boolean getGenerateRanking() {
     return m_rankingRequested;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String startSetTipText() {
     return "Set the start point for the search. This is specified as a comma "
-      +"seperated list off attribute indexes starting at 1. It can include "
-      +"ranges. Eg. 1,2,5-9,17.";
+      + "seperated list off attribute indexes starting at 1. It can include "
+      + "ranges. Eg. 1,2,5-9,17.";
   }
 
   /**
-   * Sets a starting set of attributes for the search. It is the
-   * search method's responsibility to report this start set (if any)
-   * in its toString() method.
+   * Sets a starting set of attributes for the search. It is the search method's
+   * responsibility to report this start set (if any) in its toString() method.
+   * 
    * @param startSet a string containing a list of attributes (and or ranges),
-   * eg. 1,2,6,10-15.
+   *          eg. 1,2,6,10-15.
    * @throws Exception if start set can't be set.
    */
-  public void setStartSet (String startSet) throws Exception {
+  @Override
+  public void setStartSet(String startSet) throws Exception {
     m_startRange.setRanges(startSet);
   }
 
   /**
    * Returns a list of attributes (and or attribute ranges) as a String
+   * 
    * @return a list of attributes (and or attribute ranges)
    */
-  public String getStartSet () {
+  @Override
+  public String getStartSet() {
     return m_startRange.getRanges();
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String conservativeForwardSelectionTipText() {
     return "If true (and forward search is selected) then attributes "
-      +"will continue to be added to the best subset as long as merit does "
-      +"not degrade.";
+      + "will continue to be added to the best subset as long as merit does "
+      + "not degrade.";
   }
 
   /**
-   * Set whether attributes should continue to be added during
-   * a forward search as long as merit does not decrease
+   * Set whether attributes should continue to be added during a forward search
+   * as long as merit does not decrease
+   * 
    * @param c true if atts should continue to be atted
    */
   public void setConservativeForwardSelection(boolean c) {
@@ -345,6 +386,7 @@ public class GreedyStepwise
 
   /**
    * Gets whether conservative selection has been enabled
+   * 
    * @return true if conservative forward selection is enabled
    */
   public boolean getConservativeForwardSelection() {
@@ -353,74 +395,90 @@ public class GreedyStepwise
 
   /**
    * Returns an enumeration describing the available options.
+   * 
    * @return an enumeration of all the available options.
    **/
-  public Enumeration listOptions () {
+  @Override
+  public Enumeration listOptions() {
     Vector newVector = new Vector(5);
 
     newVector.addElement(new Option("\tUse conservative forward search"
-				    ,"-C", 0, "-C"));
+      , "-C", 0, "-C"));
 
     newVector.addElement(new Option("\tUse a backward search instead of a"
-				    +"\n\tforward one."
-				    ,"-B", 0, "-B"));
+      + "\n\tforward one."
+      , "-B", 0, "-B"));
     newVector
-      .addElement(new Option("\tSpecify a starting set of attributes." 
-			     + "\n\tEg. 1,3,5-7."
-			     ,"P",1
-			     , "-P <start set>"));
+      .addElement(new Option("\tSpecify a starting set of attributes."
+        + "\n\tEg. 1,3,5-7."
+        , "P", 1
+        , "-P <start set>"));
 
     newVector.addElement(new Option("\tProduce a ranked list of attributes."
-				    ,"R",0,"-R"));
+      , "R", 0, "-R"));
     newVector
-      .addElement(new Option("\tSpecify a theshold by which attributes" 
-			     + "\n\tmay be discarded from the ranking."
-			     +"\n\tUse in conjuction with -R","T",1
-			     , "-T <threshold>"));
+      .addElement(new Option("\tSpecify a theshold by which attributes"
+        + "\n\tmay be discarded from the ranking."
+        + "\n\tUse in conjuction with -R", "T", 1
+        , "-T <threshold>"));
 
     newVector
-      .addElement(new Option("\tSpecify number of attributes to select" 
-			     ,"N",1
-			     , "-N <num to select>"));
+      .addElement(new Option("\tSpecify number of attributes to select"
+        , "N", 1
+        , "-N <num to select>"));
 
     return newVector.elements();
 
   }
-  
+
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -C
-   *  Use conservative forward search</pre>
+   * <pre>
+   * -C
+   *  Use conservative forward search
+   * </pre>
    * 
-   * <pre> -B
+   * <pre>
+   * -B
    *  Use a backward search instead of a
-   *  forward one.</pre>
+   *  forward one.
+   * </pre>
    * 
-   * <pre> -P <start set>
+   * <pre>
+   * -P <start set>
    *  Specify a starting set of attributes.
-   *  Eg. 1,3,5-7.</pre>
+   *  Eg. 1,3,5-7.
+   * </pre>
    * 
-   * <pre> -R
-   *  Produce a ranked list of attributes.</pre>
+   * <pre>
+   * -R
+   *  Produce a ranked list of attributes.
+   * </pre>
    * 
-   * <pre> -T <threshold>
+   * <pre>
+   * -T <threshold>
    *  Specify a theshold by which attributes
    *  may be discarded from the ranking.
-   *  Use in conjuction with -R</pre>
+   *  Use in conjuction with -R
+   * </pre>
    * 
-   * <pre> -N <num to select>
-   *  Specify number of attributes to select</pre>
+   * <pre>
+   * -N <num to select>
+   *  Specify number of attributes to select
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
-  public void setOptions (String[] options)
+  @Override
+  public void setOptions(String[] options)
     throws Exception {
     String optionString;
     resetOptions();
@@ -451,13 +509,14 @@ public class GreedyStepwise
 
   /**
    * Gets the current settings of ReliefFAttributeEval.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions()
    */
-  public String[] getOptions () {
+  @Override
+  public String[] getOptions() {
     String[] options = new String[9];
     int current = 0;
-    
+
     if (getSearchBackwards()) {
       options[current++] = "-B";
     }
@@ -468,7 +527,7 @@ public class GreedyStepwise
 
     if (!(getStartSet().equals(""))) {
       options[current++] = "-P";
-      options[current++] = ""+startSetToString();
+      options[current++] = "" + startSetToString();
     }
 
     if (getGenerateRanking()) {
@@ -478,46 +537,46 @@ public class GreedyStepwise
     options[current++] = "" + getThreshold();
 
     options[current++] = "-N";
-    options[current++] = ""+getNumToSelect();
+    options[current++] = "" + getNumToSelect();
 
     while (current < options.length) {
       options[current++] = "";
     }
-    return  options;
+    return options;
   }
 
   /**
-   * converts the array of starting attributes to a string. This is
-   * used by getOptions to return the actual attributes specified
-   * as the starting set. This is better than using m_startRanges.getRanges()
-   * as the same start set can be specified in different ways from the
-   * command line---eg 1,2,3 == 1-3. This is to ensure that stuff that
-   * is stored in a database is comparable.
+   * converts the array of starting attributes to a string. This is used by
+   * getOptions to return the actual attributes specified as the starting set.
+   * This is better than using m_startRanges.getRanges() as the same start set
+   * can be specified in different ways from the command line---eg 1,2,3 == 1-3.
+   * This is to ensure that stuff that is stored in a database is comparable.
+   * 
    * @return a comma seperated list of individual attribute numbers as a String
    */
   protected String startSetToString() {
     StringBuffer FString = new StringBuffer();
     boolean didPrint;
-    
+
     if (m_starting == null) {
       return getStartSet();
     }
     for (int i = 0; i < m_starting.length; i++) {
       didPrint = false;
-      
-      if ((m_hasClass == false) || 
-	  (m_hasClass == true && i != m_classIndex)) {
-	FString.append((m_starting[i] + 1));
-	didPrint = true;
+
+      if ((m_hasClass == false) ||
+        (m_hasClass == true && i != m_classIndex)) {
+        FString.append((m_starting[i] + 1));
+        didPrint = true;
       }
-      
+
       if (i == (m_starting.length - 1)) {
-	FString.append("");
+        FString.append("");
       }
       else {
-	if (didPrint) {
-	  FString.append(",");
-	  }
+        if (didPrint) {
+          FString.append(",");
+        }
       }
     }
 
@@ -526,72 +585,77 @@ public class GreedyStepwise
 
   /**
    * returns a description of the search.
+   * 
    * @return a description of the search as a String.
    */
+  @Override
   public String toString() {
     StringBuffer FString = new StringBuffer();
     FString.append("\tGreedy Stepwise ("
-		   + ((m_backward)
-		      ? "backwards)"
-		      : "forwards)")+".\n\tStart set: ");
+      + ((m_backward)
+        ? "backwards)"
+        : "forwards)") + ".\n\tStart set: ");
 
     if (m_starting == null) {
       if (m_backward) {
-	FString.append("all attributes\n");
+        FString.append("all attributes\n");
       } else {
-	FString.append("no attributes\n");
+        FString.append("no attributes\n");
       }
     }
     else {
-      FString.append(startSetToString()+"\n");
+      FString.append(startSetToString() + "\n");
     }
     if (!m_doneRanking) {
       FString.append("\tMerit of best subset found: "
-		     +Utils.doubleToString(Math.abs(m_bestMerit),8,3)+"\n");
+        + Utils.doubleToString(Math.abs(m_bestMerit), 8, 3) + "\n");
     } else {
       if (m_backward) {
-        FString.append("\n\tRanking is the order that attributes were removed, " +
-                        "starting \n\twith all attributes. The merit scores in the left" +
-                        "\n\tcolumn are the goodness of the remaining attributes in the" +
-                        "\n\tsubset after removing the corresponding in the right column" +
-                        "\n\tattribute from the subset.\n");
+        FString
+          .append("\n\tRanking is the order that attributes were removed, " +
+            "starting \n\twith all attributes. The merit scores in the left" +
+            "\n\tcolumn are the goodness of the remaining attributes in the" +
+            "\n\tsubset after removing the corresponding in the right column" +
+            "\n\tattribute from the subset.\n");
       } else {
-        FString.append("\n\tRanking is the order that attributes were added, starting " +
-                        "\n\twith no attributes. The merit scores in the left column" +
-                        "\n\tare the goodness of the subset after the adding the" +
-                        "\n\tcorresponding attribute in the right column to the subset.\n");
+        FString
+          .append("\n\tRanking is the order that attributes were added, starting "
+            +
+            "\n\twith no attributes. The merit scores in the left column" +
+            "\n\tare the goodness of the subset after the adding the" +
+            "\n\tcorresponding attribute in the right column to the subset.\n");
       }
     }
-    
+
     if ((m_threshold != -Double.MAX_VALUE) && (m_doneRanking)) {
       FString.append("\tThreshold for discarding attributes: "
-		     + Utils.doubleToString(m_threshold,8,4)+"\n");
+        + Utils.doubleToString(m_threshold, 8, 4) + "\n");
     }
 
     return FString.toString();
   }
 
-
   /**
    * Searches the attribute subset space by forward selection.
-   *
+   * 
    * @param ASEval the attribute evaluator to guide the search
    * @param data the training instances.
    * @return an array (not necessarily ordered) of selected attribute indexes
    * @throws Exception if the search can't be completed
    */
-  public int[] search (ASEvaluation ASEval, Instances data)
+  @Override
+  public int[] search(ASEvaluation ASEval, Instances data)
     throws Exception {
 
     int i;
     double best_merit = -Double.MAX_VALUE;
-    double temp_best,temp_merit;
-    int temp_index=0;
+    double temp_best, temp_merit;
+    int temp_index = 0;
     BitSet temp_group;
 
     if (data != null) { // this is a fresh run so reset
       resetOptions();
-      m_Instances = data;
+      m_Instances = new Instances(data, 0);
     }
     m_ASEval = ASEval;
 
@@ -602,12 +666,12 @@ public class GreedyStepwise
     }
 
     if (!(m_ASEval instanceof SubsetEvaluator)) {
-      throw  new Exception(m_ASEval.getClass().getName() 
-			   + " is not a " 
-			   + "Subset evaluator!");
+      throw new Exception(m_ASEval.getClass().getName()
+        + " is not a "
+        + "Subset evaluator!");
     }
 
-    m_startRange.setUpper(m_numAttribs-1);
+    m_startRange.setUpper(m_numAttribs - 1);
     if (!(getStartSet().equals(""))) {
       m_starting = m_startRange.getSelection();
     }
@@ -621,7 +685,7 @@ public class GreedyStepwise
       m_classIndex = m_Instances.classIndex();
     }
 
-    SubsetEvaluator ASEvaluator = (SubsetEvaluator)m_ASEval;
+    SubsetEvaluator ASEvaluator = (SubsetEvaluator) m_ASEval;
 
     if (m_rankedAtts == null) {
       m_rankedAtts = new double[m_numAttribs][2];
@@ -631,17 +695,17 @@ public class GreedyStepwise
     // If a starting subset has been supplied, then initialise the bitset
     if (m_starting != null && m_rankedSoFar <= 0) {
       for (i = 0; i < m_starting.length; i++) {
-	if ((m_starting[i]) != m_classIndex) {
-	  m_best_group.set(m_starting[i]);
-	}
+        if ((m_starting[i]) != m_classIndex) {
+          m_best_group.set(m_starting[i]);
+        }
       }
     } else {
       if (m_backward && m_rankedSoFar <= 0) {
-	for (i = 0; i < m_numAttribs; i++) {
-	  if (i != m_classIndex) {
-	    m_best_group.set(i);
-	  }
-	}
+        for (i = 0; i < m_numAttribs; i++) {
+          if (i != m_classIndex) {
+            m_best_group.set(i);
+          }
+        }
       }
     }
 
@@ -653,65 +717,65 @@ public class GreedyStepwise
     boolean addone = false;
     boolean z;
     while (!done) {
-      temp_group = (BitSet)m_best_group.clone();
+      temp_group = (BitSet) m_best_group.clone();
       temp_best = best_merit;
       if (m_doRank) {
-	temp_best = -Double.MAX_VALUE;
+        temp_best = -Double.MAX_VALUE;
       }
       done = true;
       addone = false;
-      for (i=0;i<m_numAttribs;i++) {
-	if (m_backward) {
-	  z = ((i != m_classIndex) && (temp_group.get(i)));
-	} else {
-	  z = ((i != m_classIndex) && (!temp_group.get(i)));
-	}
-	if (z) {
-	  // set/unset the bit
-	  if (m_backward) {
-	    temp_group.clear(i);
-	  } else {
-	    temp_group.set(i);
-	  }
-	  temp_merit = ASEvaluator.evaluateSubset(temp_group);
-	  if (m_backward) {
-	    z = (temp_merit >= temp_best);
-	  } else {
+      for (i = 0; i < m_numAttribs; i++) {
+        if (m_backward) {
+          z = ((i != m_classIndex) && (temp_group.get(i)));
+        } else {
+          z = ((i != m_classIndex) && (!temp_group.get(i)));
+        }
+        if (z) {
+          // set/unset the bit
+          if (m_backward) {
+            temp_group.clear(i);
+          } else {
+            temp_group.set(i);
+          }
+          temp_merit = ASEvaluator.evaluateSubset(temp_group);
+          if (m_backward) {
+            z = (temp_merit >= temp_best);
+          } else {
             if (m_conservativeSelection) {
               z = (temp_merit >= temp_best);
             } else {
               z = (temp_merit > temp_best);
             }
-	  }
+          }
 
-	  if (z) {
+          if (z) {
             temp_best = temp_merit;
             temp_index = i;
             addone = true;
             done = false;
-	  }
-
-	  // unset this addition/deletion
-	  if (m_backward) {
-	    temp_group.set(i);
-	  } else {
-	    temp_group.clear(i);
-	  }
-	  if (m_doRank) {
-	    done = false;
-	  }
-	}
+          }
+
+          // unset this addition/deletion
+          if (m_backward) {
+            temp_group.set(i);
+          } else {
+            temp_group.clear(i);
+          }
+          if (m_doRank) {
+            done = false;
+          }
+        }
       }
       if (addone) {
-	if (m_backward) {
-	  m_best_group.clear(temp_index);
-	} else {
-	  m_best_group.set(temp_index);
-	}
-	best_merit = temp_best;
-	m_rankedAtts[m_rankedSoFar][0] = temp_index;
-	m_rankedAtts[m_rankedSoFar][1] = best_merit;
-	m_rankedSoFar++;
+        if (m_backward) {
+          m_best_group.clear(temp_index);
+        } else {
+          m_best_group.set(temp_index);
+        }
+        best_merit = temp_best;
+        m_rankedAtts[m_rankedSoFar][0] = temp_index;
+        m_rankedAtts[m_rankedSoFar][1] = best_merit;
+        m_rankedSoFar++;
       }
     }
     m_bestMerit = best_merit;
@@ -719,35 +783,36 @@ public class GreedyStepwise
   }
 
   /**
-   * Produces a ranked list of attributes. Search must have been performed
-   * prior to calling this function. Search is called by this function to
-   * complete the traversal of the the search space. A list of
-   * attributes and merits are returned. The attributes a ranked by the
-   * order they are added to the subset during a forward selection search.
-   * Individual merit values reflect the merit associated with adding the
-   * corresponding attribute to the subset; because of this, merit values
-   * may initially increase but then decrease as the best subset is
-   * "passed by" on the way to the far side of the search space.
-   *
+   * Produces a ranked list of attributes. Search must have been performed prior
+   * to calling this function. Search is called by this function to complete the
+   * traversal of the the search space. A list of attributes and merits are
+   * returned. The attributes a ranked by the order they are added to the subset
+   * during a forward selection search. Individual merit values reflect the
+   * merit associated with adding the corresponding attribute to the subset;
+   * because of this, merit values may initially increase but then decrease as
+   * the best subset is "passed by" on the way to the far side of the search
+   * space.
+   * 
    * @return an array of attribute indexes and associated merit values
    * @throws Exception if something goes wrong.
    */
-  public double [][] rankedAttributes() throws Exception {
-    
+  @Override
+  public double[][] rankedAttributes() throws Exception {
+
     if (m_rankedAtts == null || m_rankedSoFar == -1) {
       throw new Exception("Search must be performed before attributes "
-			  +"can be ranked.");
+        + "can be ranked.");
     }
-    
+
     m_doRank = true;
-    search (m_ASEval, null);
+    search(m_ASEval, null);
 
-    double [][] final_rank = new double [m_rankedSoFar][2];
-    for (int i=0;i<m_rankedSoFar;i++) {
+    double[][] final_rank = new double[m_rankedSoFar][2];
+    for (int i = 0; i < m_rankedSoFar; i++) {
       final_rank[i][0] = m_rankedAtts[i][0];
       final_rank[i][1] = m_rankedAtts[i][1];
     }
-    
+
     resetOptions();
     m_doneRanking = true;
 
@@ -757,37 +822,38 @@ public class GreedyStepwise
 
     if (m_numToSelect <= 0) {
       if (m_threshold == -Double.MAX_VALUE) {
-	m_calculatedNumToSelect = final_rank.length;
+        m_calculatedNumToSelect = final_rank.length;
       } else {
-	determineNumToSelectFromThreshold(final_rank);
+        determineNumToSelectFromThreshold(final_rank);
       }
     }
 
     return final_rank;
   }
 
-  private void determineNumToSelectFromThreshold(double [][] ranking) {
+  private void determineNumToSelectFromThreshold(double[][] ranking) {
     int count = 0;
-    for (int i = 0; i < ranking.length; i++) {
-      if (ranking[i][1] > m_threshold) {
-	count++;
+    for (double[] element : ranking) {
+      if (element[1] > m_threshold) {
+        count++;
       }
     }
     m_calculatedNumToSelect = count;
   }
 
   /**
-   * converts a BitSet into a list of attribute indexes 
+   * converts a BitSet into a list of attribute indexes
+   * 
    * @param group the BitSet to convert
    * @return an array of attribute indexes
    **/
-  protected int[] attributeList (BitSet group) {
+  protected int[] attributeList(BitSet group) {
     int count = 0;
 
     // count how many were selected
     for (int i = 0; i < m_numAttribs; i++) {
       if (group.get(i)) {
-	count++;
+        count++;
       }
     }
 
@@ -796,11 +862,11 @@ public class GreedyStepwise
 
     for (int i = 0; i < m_numAttribs; i++) {
       if (group.get(i)) {
-	list[count++] = i;
+        list[count++] = i;
       }
     }
 
-    return  list;
+    return list;
   }
 
   /**
@@ -814,13 +880,14 @@ public class GreedyStepwise
     m_rankedSoFar = -1;
     m_rankedAtts = null;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 7267 $");
+    return RevisionUtils.extract("$Revision: 11229 $");
   }
 }
diff --git a/src/main/java/weka/attributeSelection/OneRAttributeEval.java b/src/main/java/weka/attributeSelection/OneRAttributeEval.java
index b7d698b..d0f4b7a 100644
--- a/src/main/java/weka/attributeSelection/OneRAttributeEval.java
+++ b/src/main/java/weka/attributeSelection/OneRAttributeEval.java
@@ -67,7 +67,7 @@ import java.util.Vector;
  <!-- options-end -->
  *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 5511 $
+ * @version $Revision: 11219 $
  */
 public class OneRAttributeEval
   extends ASEvaluation
@@ -467,8 +467,18 @@ public class OneRAttributeEval
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5511 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
   }
+  
+  @Override
+  public int[] postProcess(int[] attributeSet) {
+
+    // save memory
+    m_trainInstances = new Instances(m_trainInstances, 0);
+
+    return attributeSet;
+  }
+
 
   // ============
   // Test method.
diff --git a/src/main/java/weka/attributeSelection/ReliefFAttributeEval.java b/src/main/java/weka/attributeSelection/ReliefFAttributeEval.java
index 8b4df86..4868c81 100644
--- a/src/main/java/weka/attributeSelection/ReliefFAttributeEval.java
+++ b/src/main/java/weka/attributeSelection/ReliefFAttributeEval.java
@@ -125,7 +125,7 @@ import java.util.Vector;
  <!-- options-end -->
  *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 5511 $
+ * @version $Revision: 11219 $
  */
 public class ReliefFAttributeEval
   extends ASEvaluation
@@ -1331,8 +1331,18 @@ public class ReliefFAttributeEval
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5511 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
   }
+  
+  @Override
+  public int[] postProcess(int[] attributeSet) {
+
+    // save memory
+    m_trainInstances = new Instances(m_trainInstances, 0);
+
+    return attributeSet;
+  }
+
 
   // ============
   // Test method.
diff --git a/src/main/java/weka/attributeSelection/SubsetSizeForwardSelection.java b/src/main/java/weka/attributeSelection/SubsetSizeForwardSelection.java
index 21d3a72..7941fa5 100644
--- a/src/main/java/weka/attributeSelection/SubsetSizeForwardSelection.java
+++ b/src/main/java/weka/attributeSelection/SubsetSizeForwardSelection.java
@@ -21,6 +21,11 @@
  */
 package weka.attributeSelection;
 
+import java.util.BitSet;
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.Vector;
+
 import weka.core.Instances;
 import weka.core.Option;
 import weka.core.OptionHandler;
@@ -28,91 +33,114 @@ import weka.core.RevisionUtils;
 import weka.core.SelectedTag;
 import weka.core.Tag;
 import weka.core.TechnicalInformation;
-import weka.core.Utils;
 import weka.core.TechnicalInformation.Field;
 import weka.core.TechnicalInformation.Type;
-
-import java.util.BitSet;
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.Vector;
-
+import weka.core.Utils;
 
 /**
- <!-- globalinfo-start -->
- * SubsetSizeForwardSelection:<br/>
+ * <!-- globalinfo-start --> SubsetSizeForwardSelection:<br/>
  * <br/>
- * Extension of LinearForwardSelection. The search performs an interior cross-validation (seed and number of folds can be specified). A LinearForwardSelection is performed on each foldto determine the optimal subset-size (using the given SubsetSizeEvaluator). Finally, a LinearForwardSelection up to the optimal subset-size is performed on the whole data.<br/>
+ * Extension of LinearForwardSelection. The search performs an interior
+ * cross-validation (seed and number of folds can be specified). A
+ * LinearForwardSelection is performed on each foldto determine the optimal
+ * subset-size (using the given SubsetSizeEvaluator). Finally, a
+ * LinearForwardSelection up to the optimal subset-size is performed on the
+ * whole data.<br/>
  * <br/>
  * For more information see:<br/>
  * <br/>
- * Martin Guetlein (2006). Large Scale Attribute Selection Using Wrappers. Freiburg, Germany.
+ * Martin Guetlein (2006). Large Scale Attribute Selection Using Wrappers.
+ * Freiburg, Germany.
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -I
+ * <pre>
+ * -I
  *  Perform initial ranking to select the
- *  top-ranked attributes.</pre>
+ *  top-ranked attributes.
+ * </pre>
  * 
- * <pre> -K <num>
+ * <pre>
+ * -K <num>
  *  Number of top-ranked attributes that are 
- *  taken into account by the search.</pre>
+ *  taken into account by the search.
+ * </pre>
  * 
- * <pre> -T <0 = fixed-set | 1 = fixed-width>
- *  Type of Linear Forward Selection (default = 0).</pre>
+ * <pre>
+ * -T <0 = fixed-set | 1 = fixed-width>
+ *  Type of Linear Forward Selection (default = 0).
+ * </pre>
  * 
- * <pre> -S <num>
+ * <pre>
+ * -S <num>
  *  Size of lookup cache for evaluated subsets.
  *  Expressed as a multiple of the number of
- *  attributes in the data set. (default = 1)</pre>
+ *  attributes in the data set. (default = 1)
+ * </pre>
  * 
- * <pre> -E <subset evaluator>
- *  Subset-evaluator used for subset-size determination.-- -M</pre>
+ * <pre>
+ * -E <subset evaluator>
+ *  Subset-evaluator used for subset-size determination.-- -M
+ * </pre>
  * 
- * <pre> -F <num>
+ * <pre>
+ * -F <num>
  *  Number of cross validation folds
- *  for subset size determination (default = 5).</pre>
+ *  for subset size determination (default = 5).
+ * </pre>
  * 
- * <pre> -R <num>
+ * <pre>
+ * -R <num>
  *  Seed for cross validation
- *  subset size determination. (default = 1)</pre>
+ *  subset size determination. (default = 1)
+ * </pre>
  * 
- * <pre> -Z
- *  verbose on/off</pre>
+ * <pre>
+ * -Z
+ *  verbose on/off
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to evaluator weka.attributeSelection.ClassifierSubsetEval:
  * </pre>
  * 
- * <pre> -B <classifier>
+ * <pre>
+ * -B <classifier>
  *  class name of the classifier to use for accuracy estimation.
  *  Place any classifier options LAST on the command line
  *  following a "--". eg.:
  *   -B weka.classifiers.bayes.NaiveBayes ... -- -K
- *  (default: weka.classifiers.rules.ZeroR)</pre>
+ *  (default: weka.classifiers.rules.ZeroR)
+ * </pre>
  * 
- * <pre> -T
- *  Use the training data to estimate accuracy.</pre>
+ * <pre>
+ * -T
+ *  Use the training data to estimate accuracy.
+ * </pre>
  * 
- * <pre> -H <filename>
+ * <pre>
+ * -H <filename>
  *  Name of the hold out/test set to 
- *  estimate accuracy on.</pre>
+ *  estimate accuracy on.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to scheme weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * @author Martin Guetlein (martin.guetlein at gmail.com)
- * @version $Revision: 5605 $
+ * @version $Revision: 11198 $
  */
 public class SubsetSizeForwardSelection extends ASSearch
   implements OptionHandler {
@@ -129,8 +157,7 @@ public class SubsetSizeForwardSelection extends ASSearch
   protected boolean m_performRanking;
 
   /**
-   * number of top-ranked attributes that are taken into account for the
-   * search
+   * number of top-ranked attributes that are taken into account for the search
    */
   protected int m_numUsedAttributes;
 
@@ -173,15 +200,19 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns a string describing this search method
-   *
+   * 
    * @return a description of the search method suitable for displaying in the
    *         explorer/experimenter gui
    */
   public String globalInfo() {
-    return "SubsetSizeForwardSelection:\n\n" +
-      "Extension of LinearForwardSelection. The search performs an interior " +
-      "cross-validation (seed and number of folds can be specified). A " +
-      "LinearForwardSelection is performed on each foldto determine the optimal " +
+    return "SubsetSizeForwardSelection:\n\n"
+      +
+      "Extension of LinearForwardSelection. The search performs an interior "
+      +
+      "cross-validation (seed and number of folds can be specified). A "
+      +
+      "LinearForwardSelection is performed on each foldto determine the optimal "
+      +
       "subset-size (using the given SubsetSizeEvaluator). Finally, a " +
       "LinearForwardSelection up to the optimal subset-size is performed on " +
       "the whole data.\n\n"
@@ -190,68 +221,73 @@ public class SubsetSizeForwardSelection extends ASSearch
   }
 
   /**
-   * Returns an instance of a TechnicalInformation object, containing 
-   * detailed information about the technical background of this class,
-   * e.g., paper reference or book this class is based on.
+   * Returns an instance of a TechnicalInformation object, containing detailed
+   * information about the technical background of this class, e.g., paper
+   * reference or book this class is based on.
    * 
    * @return the technical information about this class
    */
   public TechnicalInformation getTechnicalInformation() {
-    TechnicalInformation        result;
-    TechnicalInformation        additional;
-    
+    TechnicalInformation result;
+    TechnicalInformation additional;
+
     result = new TechnicalInformation(Type.INPROCEEDINGS);
-    result.setValue(Field.AUTHOR, "Martin Guetlein and Eibe Frank and Mark Hall");
+    result.setValue(Field.AUTHOR,
+      "Martin Guetlein and Eibe Frank and Mark Hall");
     result.setValue(Field.YEAR, "2009");
-    result.setValue(Field.TITLE, "Large Scale Attribute Selection Using Wrappers");
-    result.setValue(Field.BOOKTITLE, "Proc IEEE Symposium on Computational Intelligence and Data Mining");
+    result.setValue(Field.TITLE,
+      "Large Scale Attribute Selection Using Wrappers");
+    result.setValue(Field.BOOKTITLE,
+      "Proc IEEE Symposium on Computational Intelligence and Data Mining");
     result.setValue(Field.PAGES, "332-339");
     result.setValue(Field.PUBLISHER, "IEEE");
-    
+
     additional = result.add(Type.MASTERSTHESIS);
     additional.setValue(Field.AUTHOR, "Martin Guetlein");
     additional.setValue(Field.YEAR, "2006");
-    additional.setValue(Field.TITLE, "Large Scale Attribute Selection Using Wrappers");
+    additional.setValue(Field.TITLE,
+      "Large Scale Attribute Selection Using Wrappers");
     additional.setValue(Field.SCHOOL, "Albert-Ludwigs-Universitaet");
     additional.setValue(Field.ADDRESS, "Freiburg, Germany");
-    
+
     return result;
   }
 
   /**
    * Returns an enumeration describing the available options.
-   *
+   * 
    * @return an enumeration of all the available options.
-   *
+   * 
    */
+  @Override
   public Enumeration listOptions() {
     Vector newVector = new Vector(9);
 
     newVector.addElement(new Option("\tPerform initial ranking to select the" +
-                                    "\n\ttop-ranked attributes.", "I", 0, "-I"));
+      "\n\ttop-ranked attributes.", "I", 0, "-I"));
     newVector.addElement(new Option(
-                                    "\tNumber of top-ranked attributes that are " +
-                                    "\n\ttaken into account by the search.", "K", 1, "-K <num>"));
+      "\tNumber of top-ranked attributes that are " +
+        "\n\ttaken into account by the search.", "K", 1, "-K <num>"));
     newVector.addElement(new Option(
-                                    "\tType of Linear Forward Selection (default = 0).", "T", 1,
-                                    "-T <0 = fixed-set | 1 = fixed-width>"));
+      "\tType of Linear Forward Selection (default = 0).", "T", 1,
+      "-T <0 = fixed-set | 1 = fixed-width>"));
     newVector.addElement(new Option(
-                                    "\tSize of lookup cache for evaluated subsets." +
-                                    "\n\tExpressed as a multiple of the number of" +
-                                    "\n\tattributes in the data set. (default = 1)", "S", 1, "-S <num>"));
+      "\tSize of lookup cache for evaluated subsets." +
+        "\n\tExpressed as a multiple of the number of" +
+        "\n\tattributes in the data set. (default = 1)", "S", 1, "-S <num>"));
     newVector.addElement(new Option(
-                                    "\tSubset-evaluator used for subset-size determination." + "-- -M",
-                                    "E", 1, "-E <subset evaluator>"));
+      "\tSubset-evaluator used for subset-size determination." + "-- -M",
+      "E", 1, "-E <subset evaluator>"));
     newVector.addElement(new Option("\tNumber of cross validation folds" +
-                                    "\n\tfor subset size determination (default = 5).", "F", 1, "-F <num>"));
+      "\n\tfor subset size determination (default = 5).", "F", 1, "-F <num>"));
     newVector.addElement(new Option("\tSeed for cross validation" +
-                                    "\n\tsubset size determination. (default = 1)", "R", 1, "-R <num>"));
+      "\n\tsubset size determination. (default = 1)", "R", 1, "-R <num>"));
     newVector.addElement(new Option("\tverbose on/off", "Z", 0, "-Z"));
 
     if ((m_setSizeEval != null) && (m_setSizeEval instanceof OptionHandler)) {
       newVector.addElement(new Option("", "", 0,
-                                      "\nOptions specific to " + "evaluator " +
-                                      m_setSizeEval.getClass().getName() + ":"));
+        "\nOptions specific to " + "evaluator " +
+          m_setSizeEval.getClass().getName() + ":"));
 
       Enumeration enu = ((OptionHandler) m_setSizeEval).listOptions();
 
@@ -265,55 +301,54 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Parses a given list of options.
-   *
+   * 
    * Valid options are:
    * <p>
-   *
+   * 
    * -I <br>
    * Perform initial ranking to select top-ranked attributes.
    * <p>
-   *
+   * 
    * -K <num> <br>
    * Number of top-ranked attributes that are taken into account.
    * <p>
-   *
+   * 
    * -T <0 = fixed-set | 1 = fixed-width> <br>
    * Typ of Linear Forward Selection (default = 0).
    * <p>
-   *
+   * 
    * -S <num> <br>
-   * Size of lookup cache for evaluated subsets. Expressed as a multiple of
-   * the number of attributes in the data set. (default = 1).
+   * Size of lookup cache for evaluated subsets. Expressed as a multiple of the
+   * number of attributes in the data set. (default = 1).
    * <p>
-   *
+   * 
    * -E <string> <br>
    * class name of subset evaluator to use for subset size determination
    * (default = null, same subset evaluator as for ranking and final forward
    * selection is used). Place any evaluator options LAST on the command line
-   * following a "--". eg. -A weka.attributeSelection.ClassifierSubsetEval ... --
-   * -M
-   *
+   * following a "--". eg. -A weka.attributeSelection.ClassifierSubsetEval ...
+   * -- -M
+   * 
    * </pre>
-   *
+   * 
    * -F <num> <br>
    * Number of cross validation folds for subset size determination (default =
    * 5).
    * <p>
-   *
+   * 
    * -R <num> <br>
    * Seed for cross validation subset size determination. (default = 1)
    * <p>
-   *
+   * 
    * -Z <br>
    * verbose on/off.
    * <p>
-   *
-   * @param options
-   *            the list of options as an array of strings
-   * @exception Exception
-   *                if an option is not supported
-   *
+   * 
+   * @param options the list of options as an array of strings
+   * @exception Exception if an option is not supported
+   * 
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
     String optionString;
     resetOptions();
@@ -343,12 +378,13 @@ public class SubsetSizeForwardSelection extends ASSearch
     optionString = Utils.getOption('E', options);
 
     if (optionString.length() == 0) {
-      System.out.println(
-                         "No subset size evaluator given, using evaluator that is used for final search.");
+      System.out
+        .println(
+        "No subset size evaluator given, using evaluator that is used for final search.");
       m_setSizeEval = null;
     } else {
       setSubsetSizeEvaluator(ASEvaluation.forName(optionString,
-                                                  Utils.partitionOptions(options)));
+        Utils.partitionOptions(options)));
     }
 
     optionString = Utils.getOption('F', options);
@@ -370,9 +406,8 @@ public class SubsetSizeForwardSelection extends ASSearch
    * Set the maximum size of the evaluated subset cache (hashtable). This is
    * expressed as a multiplier for the number of attributes in the data set.
    * (default = 1).
-   *
-   * @param size
-   *            the maximum size of the hashtable
+   * 
+   * @param size the maximum size of the hashtable
    */
   public void setLookupCacheSize(int size) {
     if (size >= 0) {
@@ -383,7 +418,7 @@ public class SubsetSizeForwardSelection extends ASSearch
   /**
    * Return the maximum size of the evaluated subset cache (expressed as a
    * multiplier for the number of attributes in a data set.
-   *
+   * 
    * @return the maximum size of the hashtable.
    */
   public int getLookupCacheSize() {
@@ -392,19 +427,21 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
   public String lookupCacheSizeTipText() {
-    return "Set the maximum size of the lookup cache of evaluated subsets. This is " +
-      "expressed as a multiplier of the number of attributes in the data set. " +
+    return "Set the maximum size of the lookup cache of evaluated subsets. This is "
+      +
+      "expressed as a multiplier of the number of attributes in the data set. "
+      +
       "(default = 1).";
   }
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -414,18 +451,17 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Perform initial ranking to select top-ranked attributes.
-   *
-   * @param b
-   *            true if initial ranking should be performed
+   * 
+   * @param b true if initial ranking should be performed
    */
   public void setPerformRanking(boolean b) {
     m_performRanking = b;
   }
 
   /**
-   * Get boolean if initial ranking should be performed to select the
-   * top-ranked attributes
-   *
+   * Get boolean if initial ranking should be performed to select the top-ranked
+   * attributes
+   * 
    * @return true if initial ranking should be performed
    */
   public boolean getPerformRanking() {
@@ -434,7 +470,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -445,11 +481,9 @@ public class SubsetSizeForwardSelection extends ASSearch
   /**
    * Set the number of top-ranked attributes that taken into account by the
    * search process.
-   *
-   * @param k
-   *            the number of attributes
-   * @exception Exception
-   *                if k is less than 2
+   * 
+   * @param k the number of attributes
+   * @exception Exception if k is less than 2
    */
   public void setNumUsedAttributes(int k) throws Exception {
     if (k < 2) {
@@ -462,7 +496,7 @@ public class SubsetSizeForwardSelection extends ASSearch
   /**
    * Get the number of top-ranked attributes that taken into account by the
    * search process.
-   *
+   * 
    * @return the number of top-ranked attributes that taken into account
    */
   public int getNumUsedAttributes() {
@@ -471,7 +505,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -481,9 +515,8 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Set the type
-   *
-   * @param t
-   *            the Linear Forward Selection type
+   * 
+   * @param t the Linear Forward Selection type
    */
   public void setType(SelectedTag t) {
     if (t.getTags() == TAGS_TYPE) {
@@ -493,7 +526,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Get the type
-   *
+   * 
    * @return the Linear Forward Selection type
    */
   public SelectedTag getType() {
@@ -502,7 +535,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -512,15 +545,14 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Set the subset evaluator to use for subset size determination.
-   *
-   * @param eval
-   *            the subset evaluator to use for subset size determination.
+   * 
+   * @param eval the subset evaluator to use for subset size determination.
    */
   public void setSubsetSizeEvaluator(ASEvaluation eval)
     throws Exception {
     if (!(eval instanceof SubsetEvaluator)) {
       throw new Exception(eval.getClass().getName() +
-                          " is no subset evaluator.");
+        " is no subset evaluator.");
     }
 
     m_setSizeEval = eval;
@@ -528,7 +560,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Get the subset evaluator used for subset size determination.
-   *
+   * 
    * @return the evaluator used for subset size determination.
    */
   public ASEvaluation getSubsetSizeEvaluator() {
@@ -537,7 +569,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -548,9 +580,8 @@ public class SubsetSizeForwardSelection extends ASSearch
   /**
    * Set the number of cross validation folds for subset size determination
    * (default = 5).
-   *
-   * @param f
-   *            number of folds
+   * 
+   * @param f number of folds
    */
   public void setNumSubsetSizeCVFolds(int f) {
     m_numFolds = f;
@@ -559,7 +590,7 @@ public class SubsetSizeForwardSelection extends ASSearch
   /**
    * Get the number of cross validation folds for subset size determination
    * (default = 5).
-   *
+   * 
    * @return number of folds
    */
   public int getNumSubsetSizeCVFolds() {
@@ -568,7 +599,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -578,9 +609,8 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Seed for cross validation subset size determination. (default = 1)
-   *
-   * @param s
-   *            seed
+   * 
+   * @param s seed
    */
   public void setSeed(int s) {
     m_seed = s;
@@ -588,7 +618,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Seed for cross validation subset size determination. (default = 1)
-   *
+   * 
    * @return seed
    */
   public int getSeed() {
@@ -597,7 +627,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Returns the tip text for this property
-   *
+   * 
    * @return tip text for this property suitable for displaying in the
    *         explorer/experimenter gui
    */
@@ -607,9 +637,8 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Set whether verbose output should be generated.
-   *
-   * @param d
-   *            true if output is to be verbose.
+   * 
+   * @param d true if output is to be verbose.
    */
   public void setVerbose(boolean b) {
     m_verbose = b;
@@ -617,7 +646,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Get whether output is to be verbose
-   *
+   * 
    * @return true if output will be verbose
    */
   public boolean getVerbose() {
@@ -626,9 +655,10 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * Gets the current settings of LinearForwardSelection.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions()
    */
+  @Override
   public String[] getOptions() {
     String[] evaluatorOptions = new String[0];
 
@@ -653,8 +683,9 @@ public class SubsetSizeForwardSelection extends ASSearch
     options[current++] = "-S";
     options[current++] = "" + m_seed;
 
-    options[current++] = "-Z";
-    options[current++] = "" + m_verbose;
+    if (getVerbose()) {
+      options[current++] = "-Z";
+    }
 
     if (m_setSizeEval != null) {
       options[current++] = "-E";
@@ -663,7 +694,7 @@ public class SubsetSizeForwardSelection extends ASSearch
 
     options[current++] = "--";
     System.arraycopy(evaluatorOptions, 0, options, current,
-                     evaluatorOptions.length);
+      evaluatorOptions.length);
     current += evaluatorOptions.length;
 
     while (current < options.length) {
@@ -675,9 +706,10 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * returns a description of the search as a String
-   *
+   * 
    * @return a description of the search
    */
+  @Override
   public String toString() {
     StringBuffer LFSString = new StringBuffer();
 
@@ -692,40 +724,38 @@ public class SubsetSizeForwardSelection extends ASSearch
     }
 
     LFSString.append("\tNumber of top-ranked attributes that are used: " +
-                     m_numUsedAttributes + "\n");
+      m_numUsedAttributes + "\n");
 
     LFSString.append(
-                     "\tNumber of cross validation folds for subset size determination: " +
-                     m_numFolds + "\n");
+      "\tNumber of cross validation folds for subset size determination: " +
+        m_numFolds + "\n");
     LFSString.append("\tSeed for cross validation subset size determination: " +
-                     m_seed + "\n");
+      m_seed + "\n");
 
     LFSString.append("\tTotal number of subsets evaluated: " + m_totalEvals +
-                     "\n");
+      "\n");
     LFSString.append("\tMerit of best subset found: " +
-                     Utils.doubleToString(Math.abs(m_bestMerit), 8, 3) + "\n");
+      Utils.doubleToString(Math.abs(m_bestMerit), 8, 3) + "\n");
 
     return LFSString.toString();
   }
 
   /**
    * Searches the attribute subset space by subset size forward selection
-   *
-   * @param ASEvaluator
-   *            the attribute evaluator to guide the search
-   * @param data
-   *            the training instances.
+   * 
+   * @param ASEvaluator the attribute evaluator to guide the search
+   * @param data the training instances.
    * @return an array (not necessarily ordered) of selected attribute indexes
-   * @exception Exception
-   *                if the search can't be completed
+   * @exception Exception if the search can't be completed
    */
+  @Override
   public int[] search(ASEvaluation ASEval, Instances data)
     throws Exception {
     m_totalEvals = 0;
 
     if (!(ASEval instanceof SubsetEvaluator)) {
       throw new Exception(ASEval.getClass().getName() + " is not a " +
-                          "Subset evaluator!");
+        "Subset evaluator!");
     }
 
     if (m_setSizeEval == null) {
@@ -735,9 +765,11 @@ public class SubsetSizeForwardSelection extends ASSearch
     m_numAttribs = data.numAttributes();
 
     if (m_numUsedAttributes > m_numAttribs) {
-      System.out.println(
-                         "Decreasing number of top-ranked attributes to total number of attributes: " +
-                         data.numAttributes());
+      System.out
+        .println(
+        "Decreasing number of top-ranked attributes to total number of attributes: "
+          +
+          data.numAttributes());
       m_numUsedAttributes = m_numAttribs;
     }
 
@@ -778,40 +810,40 @@ public class SubsetSizeForwardSelection extends ASSearch
     for (int f = 0; f < m_numFolds; f++) {
       if (m_verbose) {
         System.out.println("perform search on internal fold: " + (f + 1) + "/" +
-                           m_numFolds);
+          m_numFolds);
       }
 
       m_setSizeEval.buildEvaluator(trainData[f]);
       searchResults[f] = new LFSMethods();
       searchResults[f].forwardSearch(m_cacheSize, new BitSet(m_numAttribs),
-                                     ranking, m_numUsedAttributes,
-                                     m_linearSelectionType == TYPE_FIXED_WIDTH, 1, -1, trainData[f],
-                                     (SubsetEvaluator)m_setSizeEval, m_verbose);
+        ranking, m_numUsedAttributes,
+        m_linearSelectionType == TYPE_FIXED_WIDTH, 1, -1, trainData[f],
+        (SubsetEvaluator) m_setSizeEval, m_verbose);
 
       maxSubsetSize = Math.max(maxSubsetSize,
-                               searchResults[f].getBestGroup().cardinality());
+        searchResults[f].getBestGroup().cardinality());
     }
 
     if (m_verbose) {
       System.out.println(
-                         "continue searches on internal folds to maxSubsetSize (" +
-                         maxSubsetSize + ")");
+        "continue searches on internal folds to maxSubsetSize (" +
+          maxSubsetSize + ")");
     }
 
     for (int f = 0; f < m_numFolds; f++) {
       if (m_verbose) {
         System.out.print("perform search on internal fold: " + (f + 1) + "/" +
-                         m_numFolds + " with starting set ");
+          m_numFolds + " with starting set ");
         LFSMethods.printGroup(searchResults[f].getBestGroup(),
-                              trainData[f].numAttributes());
+          trainData[f].numAttributes());
       }
 
       if (searchResults[f].getBestGroup().cardinality() < maxSubsetSize) {
         m_setSizeEval.buildEvaluator(trainData[f]);
         searchResults[f].forwardSearch(m_cacheSize,
-                                       searchResults[f].getBestGroup(), ranking, m_numUsedAttributes,
-                                       m_linearSelectionType == TYPE_FIXED_WIDTH, 1, maxSubsetSize,
-                                       trainData[f], (SubsetEvaluator)m_setSizeEval, m_verbose);
+          searchResults[f].getBestGroup(), ranking, m_numUsedAttributes,
+          m_linearSelectionType == TYPE_FIXED_WIDTH, 1, maxSubsetSize,
+          trainData[f], (SubsetEvaluator) m_setSizeEval, m_verbose);
       }
     }
 
@@ -821,12 +853,16 @@ public class SubsetSizeForwardSelection extends ASSearch
       for (int s = 1; s <= maxSubsetSize; s++) {
         if (HoldOutSubsetEvaluator.class.isInstance(m_setSizeEval)) {
           m_setSizeEval.buildEvaluator(trainData[f]);
-          testMerit[f][s] = ((HoldOutSubsetEvaluator) m_setSizeEval).evaluateSubset(searchResults[f].getBestGroupOfSize(
-                                                                                                                        s), testData[f]);
+          testMerit[f][s] =
+            ((HoldOutSubsetEvaluator) m_setSizeEval).evaluateSubset(
+              searchResults[f].getBestGroupOfSize(
+                s), testData[f]);
         } else {
           m_setSizeEval.buildEvaluator(testData[f]);
-          testMerit[f][s] = ((SubsetEvaluator)m_setSizeEval).evaluateSubset(searchResults[f].getBestGroupOfSize(
-                                                                                             s));
+          testMerit[f][s] =
+            ((SubsetEvaluator) m_setSizeEval).evaluateSubset(searchResults[f]
+              .getBestGroupOfSize(
+              s));
         }
       }
     }
@@ -836,30 +872,30 @@ public class SubsetSizeForwardSelection extends ASSearch
 
     for (int s = 1; s <= maxSubsetSize; s++) {
       for (int f = 0; f < m_numFolds; f++) {
-        avgTestMerit[s] = ((avgTestMerit[s] * f) + testMerit[f][s]) / (double) (f +
-                                                                                1);
+        avgTestMerit[s] = ((avgTestMerit[s] * f) + testMerit[f][s]) / (f +
+          1);
       }
 
       if ((finalSubsetSize == -1) ||
-          (avgTestMerit[s] > avgTestMerit[finalSubsetSize])) {
+        (avgTestMerit[s] > avgTestMerit[finalSubsetSize])) {
         finalSubsetSize = s;
       }
 
       if (m_verbose) {
         System.out.println("average merit for subset-size " + s + ": " +
-                           avgTestMerit[s]);
+          avgTestMerit[s]);
       }
     }
 
     if (m_verbose) {
       System.out.println("performing final forward selection to subset-size: " +
-                         finalSubsetSize);
+        finalSubsetSize);
     }
 
     ASEval.buildEvaluator(data);
     LSF.forwardSearch(m_cacheSize, new BitSet(m_numAttribs), ranking,
-                      m_numUsedAttributes, m_linearSelectionType == TYPE_FIXED_WIDTH, 1,
-                      finalSubsetSize, data, (SubsetEvaluator) ASEval, m_verbose);
+      m_numUsedAttributes, m_linearSelectionType == TYPE_FIXED_WIDTH, 1,
+      finalSubsetSize, data, (SubsetEvaluator) ASEval, m_verbose);
 
     m_totalEvals = LSF.getNumEvalsTotal();
     m_bestMerit = LSF.getBestMerit();
@@ -884,9 +920,8 @@ public class SubsetSizeForwardSelection extends ASSearch
 
   /**
    * converts a BitSet into a list of attribute indexes
-   *
-   * @param group
-   *            the BitSet to convert
+   * 
+   * @param group the BitSet to convert
    * @return an array of attribute indexes
    */
   protected int[] attributeList(BitSet group) {
@@ -910,14 +945,14 @@ public class SubsetSizeForwardSelection extends ASSearch
 
     return list;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5605 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 }
-
diff --git a/src/main/java/weka/attributeSelection/WrapperSubsetEval.java b/src/main/java/weka/attributeSelection/WrapperSubsetEval.java
index e24eaab..3044024 100644
--- a/src/main/java/weka/attributeSelection/WrapperSubsetEval.java
+++ b/src/main/java/weka/attributeSelection/WrapperSubsetEval.java
@@ -108,7 +108,7 @@ import java.util.Vector;
  <!-- options-end -->
  *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 10424 $
+ * @version $Revision: 11219 $
  */
 public class WrapperSubsetEval
   extends ASEvaluation
@@ -675,8 +675,18 @@ public class WrapperSubsetEval
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 10424 $");
+    return RevisionUtils.extract("$Revision: 11219 $");
   }
+  
+  @Override
+  public int[] postProcess(int[] attributeSet) {
+
+    // save memory
+    m_trainInstances = new Instances(m_trainInstances, 0);
+
+    return attributeSet;
+  }
+
 
   /**
    * Main method for testing this class.
diff --git a/src/main/java/weka/classifiers/Evaluation.java b/src/main/java/weka/classifiers/Evaluation.java
index 938d2ef..7df4d2a 100644
--- a/src/main/java/weka/classifiers/Evaluation.java
+++ b/src/main/java/weka/classifiers/Evaluation.java
@@ -205,7 +205,7 @@ import weka.estimators.KernelEstimator;
  * 
  * @author Eibe Frank (eibe at cs.waikato.ac.nz)
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 10619 $
+ * @version $Revision: 10974 $
  */
 public class Evaluation implements Summarizable, RevisionHandler {
 
@@ -964,7 +964,7 @@ public class Evaluation implements Summarizable, RevisionHandler {
         if (preserveOrder) {
           if (splitPercentage == -1) {
             throw new Exception(
-              "Percentage split ('-percentage-split') is missing.");
+              "Percentage split ('-split-percentage') is missing.");
           }
         }
         // create new train/test sources
@@ -2397,8 +2397,8 @@ public class Evaluation implements Summarizable, RevisionHandler {
 
     StringBuffer text = new StringBuffer();
     char[] IDChars =
-      { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
-        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
+    { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+      'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
     int IDWidth;
     boolean fractional = false;
 
@@ -3261,7 +3261,7 @@ public class Evaluation implements Summarizable, RevisionHandler {
   protected static String predictionText(Classifier classifier, Instance inst,
     int instNum, Range attributesToOutput, boolean printDistribution)
 
-  throws Exception {
+    throws Exception {
 
     StringBuffer result = new StringBuffer();
     int width = 10;
@@ -3848,6 +3848,6 @@ public class Evaluation implements Summarizable, RevisionHandler {
    */
   @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 10619 $");
+    return RevisionUtils.extract("$Revision: 10974 $");
   }
 }
diff --git a/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomial.java b/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomial.java
index 8b53bfd..6af02ad 100644
--- a/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomial.java
+++ b/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomial.java
@@ -72,7 +72,7 @@ import weka.core.TechnicalInformation.Type;
  *
  * @author Andrew Golightly (acg4 at cs.waikato.ac.nz)
  * @author Bernhard Pfahringer (bernhard at cs.waikato.ac.nz)
- * @version $Revision: 6303 $ 
+ * @version $Revision: 11303 $ 
  */
 public class NaiveBayesMultinomial 
   extends Classifier 
@@ -207,7 +207,7 @@ public class NaiveBayesMultinomial
 	for(int a = 0; a<instance.numValues(); a++)
 	  if(instance.index(a) != instance.classIndex())
 	    {
-	      if(!instance.isMissing(a))
+	      if(!instance.isMissingSparse(a))
 		{
 		  numOccurences = instance.valueSparse(a) * instance.weight();
 		  if(numOccurences < 0)
@@ -372,7 +372,7 @@ public class NaiveBayesMultinomial
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6303 $");
+    return RevisionUtils.extract("$Revision: 11303 $");
   }
     
   /**
diff --git a/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomialUpdateable.java b/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomialUpdateable.java
index 5e2ae0c..313e3d7 100644
--- a/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomialUpdateable.java
+++ b/src/main/java/weka/classifiers/bayes/NaiveBayesMultinomialUpdateable.java
@@ -144,7 +144,7 @@ public class NaiveBayesMultinomialUpdateable
 
     for (int a = 0; a < instance.numValues(); a++) {
       if (instance.index(a) == instance.classIndex() ||
-	  instance.isMissing(a))
+	  instance.isMissingSparse(a))
 	continue;
 
       double numOccurences = instance.valueSparse(a) * instance.weight();
diff --git a/src/main/java/weka/classifiers/trees/RandomForest.java b/src/main/java/weka/classifiers/trees/RandomForest.java
index 2343663..0602be5 100644
--- a/src/main/java/weka/classifiers/trees/RandomForest.java
+++ b/src/main/java/weka/classifiers/trees/RandomForest.java
@@ -80,7 +80,7 @@ import weka.core.WeightedInstancesHandler;
  * 
  * <pre>
  * -K <number of features>
- *  Number of features to consider (<1=int(logM+1)).
+ *  Number of features to consider (<0 = int(log_2(#predictors)+1)).
  * </pre>
  * 
  * <pre>
@@ -114,7 +114,7 @@ public class RandomForest extends Classifier implements OptionHandler,
   private static final long serialVersionUID = -2260823972777004705L;
 
   /** Number of trees in forest. */
-  protected int m_numTrees = 10;
+  protected int m_numTrees = 100;
 
   /**
    * Number of features to consider in random feature selection. If less than 1
@@ -339,12 +339,12 @@ public class RandomForest extends Classifier implements OptionHandler,
 
     Vector newVector = new Vector();
 
-    newVector.addElement(new Option("\tNumber of trees to build.", "I", 1,
+    newVector.addElement(new Option("\tNumber of trees to build.\n\t(default 100)", "I", 1,
         "-I <number of trees>"));
 
     newVector.addElement(new Option(
-        "\tNumber of features to consider (<1=int(logM+1)).", "K", 1,
-        "-K <number of features>"));
+      "\tNumber of features to consider (<1=int(log_2(#predictors)+1)).\n\t(default 0)", "K", 1,
+      "-K <number of features>"));
 
     newVector.addElement(new Option("\tSeed for random number generator.\n"
         + "\t(default 1)", "S", 1, "-S"));
@@ -410,7 +410,7 @@ public class RandomForest extends Classifier implements OptionHandler,
    * 
    * <pre>
    * -K <number of features>
-   *  Number of features to consider (<1=int(logM+1)).
+   *  Number of features to consider (<0 = int(log_2(#predictors)+1)).
    * </pre>
    * 
    * <pre>
@@ -444,7 +444,7 @@ public class RandomForest extends Classifier implements OptionHandler,
     if (tmpStr.length() != 0) {
       m_numTrees = Integer.parseInt(tmpStr);
     } else {
-      m_numTrees = 10;
+      m_numTrees = 100;
     }
 
     tmpStr = Utils.getOption('K', options);
@@ -505,7 +505,7 @@ public class RandomForest extends Classifier implements OptionHandler,
     // set up the random tree options
     m_KValue = m_numFeatures;
     if (m_KValue < 1)
-      m_KValue = (int) Utils.log2(data.numAttributes()) + 1;
+      m_KValue = (int) Utils.log2(data.numAttributes() - 1) + 1;
     rTree.setKValue(m_KValue);
     rTree.setMaxDepth(getMaxDepth());
 
diff --git a/src/main/java/weka/classifiers/trees/RandomTree.java b/src/main/java/weka/classifiers/trees/RandomTree.java
index 1532624..d32583e 100644
--- a/src/main/java/weka/classifiers/trees/RandomTree.java
+++ b/src/main/java/weka/classifiers/trees/RandomTree.java
@@ -58,8 +58,8 @@ import weka.core.WeightedInstancesHandler;
  * 
  * <pre>
  * -K <number of attributes>
- *  Number of attributes to randomly investigate
- *  (<0 = int(log_2(#attributes)+1)).
+ *  Number of attributes to randomly investigate. (default 0)
+ *  (<0 = int(log_2(#predictors)+1)).
  * </pre>
  * 
  * <pre>
@@ -99,7 +99,7 @@ import weka.core.WeightedInstancesHandler;
  * 
  * @author Eibe Frank (eibe at cs.waikato.ac.nz)
  * @author Richard Kirkby (rkirkby at cs.waikato.ac.nz)
- * @version $Revision: 10287 $
+ * @version $Revision: 10993 $
  */
 public class RandomTree extends Classifier implements OptionHandler,
     WeightedInstancesHandler, Randomizable, Drawable {
@@ -340,8 +340,8 @@ public class RandomTree extends Classifier implements OptionHandler,
     Vector newVector = new Vector();
 
     newVector.addElement(new Option(
-        "\tNumber of attributes to randomly investigate\n"
-            + "\t(<0 = int(log_2(#attributes)+1)).", "K", 1,
+        "\tNumber of attributes to randomly investigate. (default 0)\n"
+            + "\t(<0 = int(log_2(#predictors)+1)).", "K", 1,
         "-K <number of attributes>"));
 
     newVector.addElement(new Option(
@@ -545,7 +545,7 @@ public class RandomTree extends Classifier implements OptionHandler,
     if (m_KValue > data.numAttributes() - 1)
       m_KValue = data.numAttributes() - 1;
     if (m_KValue < 1)
-      m_KValue = (int) Utils.log2(data.numAttributes()) + 1;
+      m_KValue = (int) Utils.log2(data.numAttributes() - 1) + 1;
 
     // can classifier handle the data?
     getCapabilities().testWithFail(data);
@@ -1445,7 +1445,7 @@ public class RandomTree extends Classifier implements OptionHandler,
      * @return the revision
      */
     public String getRevision() {
-      return RevisionUtils.extract("$Revision: 10287 $");
+      return RevisionUtils.extract("$Revision: 10993 $");
     }
 
     /**
diff --git a/src/main/java/weka/clusterers/HierarchicalClusterer.java b/src/main/java/weka/clusterers/HierarchicalClusterer.java
index 28a3df7..263b59b 100644
--- a/src/main/java/weka/clusterers/HierarchicalClusterer.java
+++ b/src/main/java/weka/clusterers/HierarchicalClusterer.java
@@ -23,8 +23,10 @@ package weka.clusterers;
 
 import java.io.Serializable;
 import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.Comparator;
 import java.util.Enumeration;
+import java.util.Locale;
 import java.util.PriorityQueue;
 import java.util.Vector;
 
@@ -83,7 +85,7 @@ import weka.core.Capabilities.Capability;
 * 
 * @author Remco Bouckaert (rrb at xm.co.nz, remco at cs.waikato.ac.nz)
 * @author Eibe Frank (eibe at cs.waikato.ac.nz)
-* @version $Revision: 6592 $
+* @version $Revision: 11330 $
 */
 public class HierarchicalClusterer extends AbstractClusterer implements OptionHandler, CapabilitiesHandler, Drawable {
   private static final long serialVersionUID = 1L;
@@ -184,7 +186,9 @@ public class HierarchicalClusterer extends AbstractClusterer implements OptionHa
     double m_fRightLength = 0;
     double m_fHeight = 0;
     public String toString(int attIndex) {
-      DecimalFormat myFormatter = new DecimalFormat("#.#####");
+      NumberFormat nf = NumberFormat.getNumberInstance(new Locale("en","US"));
+      DecimalFormat myFormatter = (DecimalFormat)nf;
+      myFormatter.applyPattern("#.#####");
 
       if (m_left == null) {
         if (m_right == null) {
@@ -204,7 +208,9 @@ public class HierarchicalClusterer extends AbstractClusterer implements OptionHa
       }
     }
     public String toString2(int attIndex) {
-      DecimalFormat myFormatter = new DecimalFormat("#.#####");
+      NumberFormat nf = NumberFormat.getNumberInstance(new Locale("en","US"));
+      DecimalFormat myFormatter = (DecimalFormat)nf;
+      myFormatter.applyPattern("#.#####");
 
       if (m_left == null) {
         if (m_right == null) {
@@ -1118,6 +1124,6 @@ public class HierarchicalClusterer extends AbstractClusterer implements OptionHa
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6592 $");
+    return RevisionUtils.extract("$Revision: 11330 $");
   }
 } // class HierarchicalClusterer
diff --git a/src/main/java/weka/clusterers/UpdateableClusterer.java b/src/main/java/weka/clusterers/UpdateableClusterer.java
index 1bd9167..9b6c0ed 100644
--- a/src/main/java/weka/clusterers/UpdateableClusterer.java
+++ b/src/main/java/weka/clusterers/UpdateableClusterer.java
@@ -24,24 +24,24 @@ package weka.clusterers;
 import weka.core.Instance;
 
 /**
- * Interface to incremental cluster models that can learn using one instance 
- * at a time.
+ * Interface to incremental cluster models that can learn using one instance at
+ * a time.
  * 
- * @author  FracPete (fracpete at waikato dot ac dot nz)
+ * @author FracPete (fracpete at waikato dot ac dot nz)
  * @version $Revision: 1.2 $
  */
 public interface UpdateableClusterer {
 
   /**
    * Adds an instance to the clusterer.
-   *
+   * 
    * @param newInstance the instance to be added
-   * @throws Exception 	if something goes wrong
+   * @throws Exception if something goes wrong
    */
   public void updateClusterer(Instance newInstance) throws Exception;
 
   /**
-   * Singals the end of the updating.
+   * Signals the end of the updating.
    */
   public void updateFinished();
-}
\ No newline at end of file
+}
diff --git a/src/main/java/weka/core/AttributeLocator.java b/src/main/java/weka/core/AttributeLocator.java
index bef1c1f..dd9af56 100644
--- a/src/main/java/weka/core/AttributeLocator.java
+++ b/src/main/java/weka/core/AttributeLocator.java
@@ -1,337 +1,359 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * StringLocator.java
- * Copyright (C) 2005-2014 University of Waikato, Hamilton, New Zealand
- */
-
-package weka.core;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.BitSet;
-
-/**
- * This class locates and records the indices of a certain type of attributes,
- * recursively in case of Relational attributes.
- * 
- * @author fracpete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 1.4 $
- * @see Attribute#RELATIONAL
- */
-public class AttributeLocator implements Serializable,
-  Comparable<AttributeLocator>, RevisionHandler {
-
-  /** for serialization */
-  private static final long serialVersionUID = -2932848827681070345L;
-
-  /** the attribute indices that may be inspected */
-  protected int[] m_AllowedIndices = null;
-
-  /** contains the attribute locations, either true or false Boolean objects */
-  protected BitSet m_Attributes = null;
-
-  /**
-   * contains the locator locations, either null or a AttributeLocator reference
-   */
-  protected ArrayList<AttributeLocator> m_Locators = null;
-
-  /** the type of the attribute */
-  protected int m_Type = -1;
-
-  /** the referenced data */
-  protected Instances m_Data = null;
-
-  /** the indices */
-  protected int[] m_Indices = null;
-
-  /** the indices of locator objects */
-  protected int[] m_LocatorIndices = null;
-
-  /**
-   * Initializes the AttributeLocator with the given data for the specified type
-   * of attribute. Checks all attributes.
-   * 
-   * @param data the data to work on
-   * @param type the type of attribute to locate
-   */
-  public AttributeLocator(Instances data, int type) {
-    this(data, type, 0, data.numAttributes() - 1);
-  }
-
-  /**
-   * Initializes the AttributeLocator with the given data for the specified type
-   * of attribute. Checks only the given range.
-   * 
-   * @param data the data to work on
-   * @param type the type of attribute to locate
-   * @param fromIndex the first index to inspect (including)
-   * @param toIndex the last index to check (including)
-   */
-  public AttributeLocator(Instances data, int type, int fromIndex, int toIndex) {
-    super();
-
-    int[] indices = new int[toIndex - fromIndex + 1];
-    for (int i = 0; i < indices.length; i++) {
-      indices[i] = fromIndex + i;
-    }
-
-    initialize(data, type, indices);
-  }
-
-  /**
-   * initializes the AttributeLocator with the given data for the specified type
-   * of attribute. Checks only the given attribute indices.
-   * 
-   * @param data the data to work on
-   * @param type the type of attribute to locate
-   * @param indices the attribute indices to check
-   */
-  public AttributeLocator(Instances data, int type, int[] indices) {
-    super();
-
-    initialize(data, type, indices);
-  }
-
-  /**
-   * initializes the AttributeLocator
-   * 
-   * @param data the data to base the search for attributes on
-   * @param type the type of attribute to look for
-   * @param indices the indices that are allowed to check
-   */
-  protected void initialize(Instances data, int type, int[] indices) {
-    m_Data = new Instances(data, 0);
-    m_Type = type;
-
-    m_AllowedIndices = new int[indices.length];
-    System.arraycopy(indices, 0, m_AllowedIndices, 0, indices.length);
-
-    locate();
-
-    m_Indices = find(true);
-    m_LocatorIndices = find(false);
-  }
-
-  /**
-   * returns the type of attribute that is located
-   * 
-   * @return the type of attribute
-   */
-  public int getType() {
-    return m_Type;
-  }
-
-  /**
-   * returns the indices that are allowed to check for the attribute type
-   * 
-   * @return the indices that are checked for the attribute type
-   */
-  public int[] getAllowedIndices() {
-    return m_AllowedIndices;
-  }
-
-  /**
-   * sets up the structure
-   */
-  protected void locate() {
-    int i;
-
-    m_Attributes = new BitSet(m_AllowedIndices.length);
-    m_Locators = new ArrayList<AttributeLocator>();
-
-    for (i = 0; i < m_AllowedIndices.length; i++) {
-      if (m_Data.attribute(m_AllowedIndices[i]).type() == Attribute.RELATIONAL) {
-        m_Locators.add(new AttributeLocator(m_Data.attribute(
-          m_AllowedIndices[i]).relation(), getType()));
-      } else {
-        m_Locators.add(null);
-      }
-
-      m_Attributes.set(i,
-        m_Data.attribute(m_AllowedIndices[i]).type() == getType());
-    }
-  }
-
-  /**
-   * returns the underlying data
-   * 
-   * @return the underlying Instances object
-   */
-  public Instances getData() {
-    return m_Data;
-  }
-
-  /**
-   * returns the indices of the searched-for attributes (if TRUE) or the indices
-   * of AttributeLocator objects (if FALSE)
-   * 
-   * @param findAtts if true the indices of attributes are located, otherwise
-   *          the ones of AttributeLocator objects
-   * @return the indices of the attributes or the AttributeLocator objects
-   */
-  protected int[] find(boolean findAtts) {
-    int i;
-    int[] result;
-    ArrayList<Integer> indices;
-
-    // determine locations
-    indices = new ArrayList<Integer>();
-    if (findAtts) {
-      for (i = 0; i < m_Attributes.size(); i++) {
-        if (m_Attributes.get(i)) {
-          indices.add(new Integer(i));
-        }
-      }
-    } else {
-      for (i = 0; i < m_Locators.size(); i++) {
-        if (m_Locators.get(i) != null) {
-          indices.add(new Integer(i));
-        }
-      }
-    }
-
-    // fill array
-    result = new int[indices.size()];
-    for (i = 0; i < indices.size(); i++) {
-      result[i] = indices.get(i).intValue();
-    }
-
-    return result;
-  }
-
-  /**
-   * returns actual index in the Instances object.
-   * 
-   * @param index the index in the m_AllowedIndices array
-   * @return the actual index in the instances object
-   */
-  public int getActualIndex(int index) {
-    return m_AllowedIndices[index];
-  }
-
-  /**
-   * Returns the indices of the attributes. These indices are referring to the
-   * m_AllowedIndices array, not the actual indices in the Instances object.
-   * 
-   * @return the indices of the attributes
-   * @see #getActualIndex(int)
-   */
-  public int[] getAttributeIndices() {
-    return m_Indices;
-  }
-
-  /**
-   * Returns the indices of the AttributeLocator objects. These indices are
-   * referring to the m_AllowedIndices array, not the actual indices in the
-   * Instances object.
-   * 
-   * @return the indices of the AttributeLocator objects
-   * @see #getActualIndex(int)
-   */
-  public int[] getLocatorIndices() {
-    return m_LocatorIndices;
-  }
-
-  /**
-   * Returns the AttributeLocator at the given index. This index refers to the
-   * index of the m_AllowedIndices array, not the actual Instances object.
-   * 
-   * @param index the index of the locator to retrieve
-   * @return the AttributeLocator at the given index
-   */
-  public AttributeLocator getLocator(int index) {
-    return m_Locators.get(index);
-  }
-
-  /**
-   * Compares this object with the specified object for order. Returns a
-   * negative integer, zero, or a positive integer as this object is less than,
-   * equal to, or greater than the specified object. Only type and indices are
-   * checked.
-   * 
-   * @param o the object to compare with
-   * @return -1 if less than, 0 if equal, +1 if greater than the given object
-   */
-  @Override
-  public int compareTo(AttributeLocator o) {
-    int result;
-    int i;
-
-    result = 0;
-
-    // 1. check type
-    if (this.getType() < o.getType()) {
-      result = -1;
-    } else if (this.getType() > o.getType()) {
-      result = 1;
-    } else {
-      // 2. check indices
-      if (this.getAllowedIndices().length < o.getAllowedIndices().length) {
-        result = -1;
-      } else if (this.getAllowedIndices().length > o.getAllowedIndices().length) {
-        result = 1;
-      } else {
-        for (i = 0; i < this.getAllowedIndices().length; i++) {
-          if (this.getAllowedIndices()[i] < o.getAllowedIndices()[i]) {
-            result = -1;
-            break;
-          } else if (this.getAllowedIndices()[i] > o.getAllowedIndices()[i]) {
-            result = 1;
-            break;
-          } else {
-            result = 0;
-          }
-        }
-      }
-    }
-
-    return result;
-  }
-
-  /**
-   * Indicates whether some other object is "equal to" this one. Only type and
-   * indices are checked.
-   * 
-   * @param o the AttributeLocator to check for equality
-   * @return true if the AttributeLocators have the same type and indices
-   */
-  @Override
-  public boolean equals(Object o) {
-    return (compareTo((AttributeLocator) o) == 0);
-  }
-
-  /**
-   * returns a string representation of this object
-   * 
-   * @return a string representation
-   */
-  @Override
-  public String toString() {
-    return m_Attributes.toString();
-  }
-
-  /**
-   * Returns the revision string.
-   * 
-   * @return the revision
-   */
-  @Override
-  public String getRevision() {
-    return RevisionUtils.extract("$Revision: 1.4 $");
-  }
-}
+/*
+ *   This program is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 3 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * StringLocator.java
+ * Copyright (C) 2005-2012 University of Waikato, Hamilton, New Zealand
+ */
+
+package weka.core;
+
+import java.io.Serializable;
+import java.util.Vector;
+import java.util.BitSet;
+
+/**
+ * This class locates and records the indices of a certain type of attributes, 
+ * recursively in case of Relational attributes.
+ * 
+ * @author fracpete (fracpete at waikato dot ac dot nz)
+ * @version $Revision: 8034 $
+ * @see Attribute#RELATIONAL
+ */
+public class AttributeLocator 
+  implements Serializable, Comparable<AttributeLocator>, RevisionHandler {
+  
+  /** for serialization */
+  private static final long serialVersionUID = -2932848827681070345L;
+
+  /** the attribute indices that may be inspected */
+  protected int[] m_AllowedIndices = null;
+  
+  /** contains the attribute locations, either true or false Boolean objects */
+  protected Vector<Boolean> m_Attributes = null;
+  
+  /** contains the attribute locations, either true or false (efficient replacement) */
+  protected BitSet m_AttributesEfficient = null;
+  
+  /** contains the locator locations, either null or a AttributeLocator reference */
+  protected Vector<AttributeLocator> m_Locators = null;
+
+  /** the type of the attribute */
+  protected int m_Type = -1;
+  
+  /** the referenced data */
+  protected Instances m_Data = null;
+
+  /** the indices */
+  protected int[] m_Indices = null;
+
+  /** the indices of locator objects */
+  protected int[] m_LocatorIndices = null;
+  
+  /**
+   * Initializes the AttributeLocator with the given data for the specified
+   * type of attribute. Checks all attributes.
+   * 
+   * @param data	the data to work on
+   * @param type	the type of attribute to locate
+   */
+  public AttributeLocator(Instances data, int type) {
+    this(data, type, 0, data.numAttributes() - 1);
+  }
+  
+  /**
+   * Initializes the AttributeLocator with the given data for the specified
+   * type of attribute. Checks only the given range.
+   * 
+   * @param data	the data to work on
+   * @param type	the type of attribute to locate
+   * @param fromIndex	the first index to inspect (including)
+   * @param toIndex	the last index to check (including)
+   */
+  public AttributeLocator(Instances data, int type, int fromIndex, int toIndex) {
+    super();
+
+    int[] indices = new int[toIndex - fromIndex + 1];
+    for (int i = 0; i < indices.length; i++)
+      indices[i] = fromIndex + i;
+    
+    initialize(data, type, indices);
+  }
+  
+  /**
+   * initializes the AttributeLocator with the given data for the specified
+   * type of attribute. Checks only the given attribute indices.
+   * 
+   * @param data	the data to work on
+   * @param type	the type of attribute to locate
+   * @param indices	the attribute indices to check
+   */
+  public AttributeLocator(Instances data, int type, int[] indices) {
+    super();
+
+    initialize(data, type, indices);
+  }
+  
+  /**
+   * initializes the AttributeLocator
+   * 
+   * @param data	the data to base the search for attributes on
+   * @param type	the type of attribute to look for
+   * @param indices	the indices that are allowed to check
+   */
+  protected void initialize(Instances data, int type, int[] indices) {
+    m_Data = new Instances(data, 0);
+    m_Type = type;
+    
+    m_AllowedIndices = new int[indices.length];
+    System.arraycopy(indices, 0, m_AllowedIndices, 0, indices.length);
+    
+    locate();
+
+    m_Indices        = find(true);
+    m_LocatorIndices = find(false);
+  }
+  
+  /**
+   * returns the type of attribute that is located
+   * 
+   * @return		the type of attribute
+   */
+  public int getType() {
+    return m_Type;
+  }
+  
+  /**
+   * returns the indices that are allowed to check for the attribute type
+   * 
+   * @return 		the indices that are checked for the attribute type
+   */
+  public int[] getAllowedIndices() {
+    return m_AllowedIndices;
+  }
+  
+  /**
+   * sets up the structure
+   */
+  protected void locate() {
+    int         i;
+    
+    m_Attributes = null;
+    m_AttributesEfficient = new BitSet(m_AllowedIndices.length);
+    m_Locators   = new Vector<AttributeLocator>();
+    
+    for (i = 0; i < m_AllowedIndices.length; i++) {
+      if (m_Data.attribute(m_AllowedIndices[i]).type() == Attribute.RELATIONAL)
+	m_Locators.add(new AttributeLocator(m_Data.attribute(m_AllowedIndices[i]).relation(), getType()));
+      else
+	m_Locators.add(null);
+      
+      m_AttributesEfficient.set(i, m_Data.attribute(m_AllowedIndices[i]).type() == getType());
+    }
+  }
+  
+  /**
+   * returns the underlying data
+   * 
+   * @return      the underlying Instances object
+   */
+  public Instances getData() {
+    return m_Data;
+  }
+  
+  /**
+   * returns the indices of the searched-for attributes (if TRUE) or the indices
+   * of AttributeLocator objects (if FALSE)
+   * 
+   * @param findAtts      if true the indices of attributes are located,
+   *                      otherwise the ones of AttributeLocator objects
+   * @return              the indices of the attributes or the AttributeLocator objects
+   */
+  protected int[] find(boolean findAtts) {
+    int		i;
+    int[]	result;
+    Vector<Integer>	indices;
+
+    if (m_AttributesEfficient == null) 
+      moveFromBooleanVectorToBitSet();
+
+    // determine locations
+    indices = new Vector<Integer>();
+    if (findAtts) {
+      for (i = 0; i < m_AttributesEfficient.size(); i++) {
+	if (((Boolean) m_AttributesEfficient.get(i)).booleanValue())
+	  indices.add(new Integer(i));
+      }
+    }
+    else {
+      for (i = 0; i < m_Locators.size(); i++) {
+	if (m_Locators.get(i) != null)
+	  indices.add(new Integer(i));
+      }
+    }
+    
+    // fill array
+    result = new int[indices.size()];
+    for (i = 0; i < indices.size(); i++)
+      result[i] = ((Integer) indices.get(i)).intValue();
+    
+    return result;
+  }
+
+  /**
+   * returns actual index in the Instances object.
+   * 
+   * @param index	the index in the m_AllowedIndices array
+   * @return		the actual index in the instances object
+   */
+  public int getActualIndex(int index) {
+    return m_AllowedIndices[index];
+  }
+  
+  /**
+   * Returns the indices of the attributes. These indices are referring
+   * to the m_AllowedIndices array, not the actual indices in the Instances
+   * object.
+   * 
+   * @return	the indices of the attributes
+   * @see	#getActualIndex(int)
+   */
+  public int[] getAttributeIndices() {
+    return m_Indices;
+  }
+  
+  /**
+   * Returns the indices of the AttributeLocator objects.  These indices are 
+   * referring to the m_AllowedIndices array, not the actual indices in the 
+   * Instances object.
+   * 
+   * @return	the indices of the AttributeLocator objects
+   * @see	#getActualIndex(int)
+   */
+  public int[] getLocatorIndices() {
+    return m_LocatorIndices;
+  }
+  
+  /**
+   * Returns the AttributeLocator at the given index. This index refers to
+   * the index of the m_AllowedIndices array, not the actual Instances object.
+   * 
+   * @param index   the index of the locator to retrieve
+   * @return        the AttributeLocator at the given index
+   */
+  public AttributeLocator getLocator(int index) {
+    return (AttributeLocator) m_Locators.get(index);
+  }
+  
+  /**
+   * Compares this object with the specified object for order. Returns a 
+   * negative integer, zero, or a positive integer as this object is less 
+   * than, equal to, or greater than the specified object. Only type and
+   * indices are checked.
+   * 
+   * @param o		the object to compare with
+   * @return		-1 if less than, 0 if equal, +1 if greater than the 
+   * 			given object
+   */
+  public int compareTo(AttributeLocator o) {
+    int		result;
+    int		i;
+    
+    result = 0;
+    
+    // 1. check type
+    if (this.getType() < o.getType()) {
+      result = -1;
+    }
+    else if (this.getType() > o.getType()) {
+      result = 1;
+    }
+    else {
+      // 2. check indices
+      if (this.getAllowedIndices().length < o.getAllowedIndices().length) {
+	result = -1;
+      }
+      else if (this.getAllowedIndices().length > o.getAllowedIndices().length) {
+	result = 1;
+      }
+      else {
+	for (i = 0; i < this.getAllowedIndices().length; i++) {
+	  if (this.getAllowedIndices()[i] < o.getAllowedIndices()[i]) {
+	    result = -1;
+	    break;
+	  }
+	  else if (this.getAllowedIndices()[i] > o.getAllowedIndices()[i]) {
+	    result = 1;
+	    break;
+	  }
+	  else {
+	    result = 0;
+	  }
+	}
+      }
+    }
+    
+    return result;
+  }
+  
+  /**
+   * Indicates whether some other object is "equal to" this one. Only type
+   * and indices are checked.
+   * 
+   * @param o		the AttributeLocator to check for equality
+   * @return		true if the AttributeLocators have the same type and 
+   * 			indices
+   */
+  public boolean equals(Object o) {
+    return (compareTo((AttributeLocator) o) == 0);
+  }
+  
+  /**
+   * returns a string representation of this object
+   * 
+   * @return 		a string representation
+   */
+  public String toString() {
+
+    if (m_AttributesEfficient == null) 
+      moveFromBooleanVectorToBitSet();
+
+    return m_AttributesEfficient.toString();
+  }
+  
+  /**
+   * Moves data from Vector<Boolean> to Bitset. Creates bitset first. Sets vector to null.
+   */
+  private void moveFromBooleanVectorToBitSet() {
+
+    m_AttributesEfficient = new BitSet(m_Attributes.size());
+    
+    for (int i = 0; i < m_Attributes.size(); i++) {
+      if (((Boolean) m_Attributes.get(i)).booleanValue())
+        m_AttributesEfficient.set(i, true);
+    }
+    
+    m_Attributes = null;
+  }
+
+  /**
+   * Returns the revision string.
+   * 
+   * @return		the revision
+   */
+  public String getRevision() {
+    return RevisionUtils.extract("$Revision: 8034 $");
+  }
+}
diff --git a/src/main/java/weka/core/converters/ArffLoader.java b/src/main/java/weka/core/converters/ArffLoader.java
index da50f8b..de6e8e0 100644
--- a/src/main/java/weka/core/converters/ArffLoader.java
+++ b/src/main/java/weka/core/converters/ArffLoader.java
@@ -22,14 +22,6 @@
 
 package weka.core.converters;
 
-import weka.core.Attribute;
-import weka.core.FastVector;
-import weka.core.Instance;
-import weka.core.Instances;
-import weka.core.RevisionHandler;
-import weka.core.RevisionUtils;
-import weka.core.SparseInstance;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -41,16 +33,23 @@ import java.io.StringReader;
 import java.net.URL;
 import java.text.ParseException;
 
+import weka.core.Attribute;
+import weka.core.FastVector;
+import weka.core.Instance;
+import weka.core.Instances;
+import weka.core.RevisionHandler;
+import weka.core.RevisionUtils;
+import weka.core.SparseInstance;
 
 /**
- <!-- globalinfo-start -->
- * Reads a source that is in arff (attribute relation file format) format.
+ * <!-- globalinfo-start --> Reads a source that is in arff (attribute relation
+ * file format) format.
  * <p/>
- <!-- globalinfo-end -->
- *
+ * <!-- globalinfo-end -->
+ * 
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
  * @author FracPete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 9653 $
+ * @version $Revision: 11137 $
  * @see Loader
  */
 public class ArffLoader
@@ -74,19 +73,24 @@ public class ArffLoader
   protected transient ArffReader m_ArffReader = null;
 
   /**
-   * Reads data from an ARFF file, either in incremental or batch mode. <p/>
-   *
+   * Reads data from an ARFF file, either in incremental or batch mode.
+   * <p/>
+   * 
    * Typical code for batch usage:
+   * 
    * <pre>
-   * BufferedReader reader = new BufferedReader(new FileReader("/some/where/file.arff"));
+   * BufferedReader reader =
+   *   new BufferedReader(new FileReader("/some/where/file.arff"));
    * ArffReader arff = new ArffReader(reader);
    * Instances data = arff.getData();
    * data.setClassIndex(data.numAttributes() - 1);
    * </pre>
-   *
+   * 
    * Typical code for incremental usage:
+   * 
    * <pre>
-   * BufferedReader reader = new BufferedReader(new FileReader("/some/where/file.arff"));
+   * BufferedReader reader =
+   *   new BufferedReader(new FileReader("/some/where/file.arff"));
    * ArffReader arff = new ArffReader(reader, 1000);
    * Instances data = arff.getStructure();
    * data.setClassIndex(data.numAttributes() - 1);
@@ -95,11 +99,11 @@ public class ArffLoader
    *   data.add(inst);
    * }
    * </pre>
-   *
-   * @author  Eibe Frank (eibe at cs.waikato.ac.nz)
-   * @author  Len Trigg (trigg at cs.waikato.ac.nz)
-   * @author  fracpete (fracpete at waikato dot ac dot nz)
-   * @version $Revision: 9653 $
+   * 
+   * @author Eibe Frank (eibe at cs.waikato.ac.nz)
+   * @author Len Trigg (trigg at cs.waikato.ac.nz)
+   * @author fracpete (fracpete at waikato dot ac dot nz)
+   * @version $Revision: 11137 $
    */
   public static class ArffReader
     implements RevisionHandler {
@@ -120,12 +124,12 @@ public class ArffLoader
     protected int m_Lines;
 
     /**
-     * Reads the data completely from the reader. The data can be accessed
-     * via the <code>getData()</code> method.
-     *
-     * @param reader		the reader to use
-     * @throws IOException	if something goes wrong
-     * @see			#getData()
+     * Reads the data completely from the reader. The data can be accessed via
+     * the <code>getData()</code> method.
+     * 
+     * @param reader the reader to use
+     * @throws IOException if something goes wrong
+     * @see #getData()
      */
     public ArffReader(Reader reader) throws IOException {
       m_Tokenizer = new StreamTokenizer(reader);
@@ -137,7 +141,8 @@ public class ArffLoader
       Instance inst;
       while ((inst = readInstance(m_Data)) != null) {
         m_Data.add(inst);
-      };
+      }
+      ;
 
       compactify();
     }
@@ -145,17 +150,18 @@ public class ArffLoader
     /**
      * Reads only the header and reserves the specified space for instances.
      * Further instances can be read via <code>readInstance()</code>.
-     *
-     * @param reader			the reader to use
-     * @param capacity 			the capacity of the new dataset
-     * @throws IOException		if something goes wrong
-     * @throws IllegalArgumentException	if capacity is negative
-     * @see				#getStructure()
-     * @see				#readInstance(Instances)
+     * 
+     * @param reader the reader to use
+     * @param capacity the capacity of the new dataset
+     * @throws IOException if something goes wrong
+     * @throws IllegalArgumentException if capacity is negative
+     * @see #getStructure()
+     * @see #readInstance(Instances)
      */
     public ArffReader(Reader reader, int capacity) throws IOException {
-      if (capacity < 0)
-	throw new IllegalArgumentException("Capacity has to be positive!");
+      if (capacity < 0) {
+        throw new IllegalArgumentException("Capacity has to be positive!");
+      }
 
       m_Tokenizer = new StreamTokenizer(reader);
       initTokenizer();
@@ -165,22 +171,24 @@ public class ArffLoader
     }
 
     /**
-     * Reads the data without header according to the specified template.
-     * The data can be accessed via the <code>getData()</code> method.
-     *
-     * @param reader		the reader to use
-     * @param template		the template header
-     * @param lines		the lines read so far
-     * @throws IOException	if something goes wrong
-     * @see			#getData()
+     * Reads the data without header according to the specified template. The
+     * data can be accessed via the <code>getData()</code> method.
+     * 
+     * @param reader the reader to use
+     * @param template the template header
+     * @param lines the lines read so far
+     * @throws IOException if something goes wrong
+     * @see #getData()
      */
-    public ArffReader(Reader reader, Instances template, int lines) throws IOException {
+    public ArffReader(Reader reader, Instances template, int lines)
+      throws IOException {
       this(reader, template, lines, 100);
 
       Instance inst;
       while ((inst = readInstance(m_Data)) != null) {
         m_Data.add(inst);
-      };
+      }
+      ;
 
       compactify();
     }
@@ -189,16 +197,17 @@ public class ArffLoader
      * Initializes the reader without reading the header according to the
      * specified template. The data must be read via the
      * <code>readInstance()</code> method.
-     *
-     * @param reader		the reader to use
-     * @param template		the template header
-     * @param lines		the lines read so far
-     * @param capacity 		the capacity of the new dataset
-     * @throws IOException	if something goes wrong
-     * @see			#getData()
+     * 
+     * @param reader the reader to use
+     * @param template the template header
+     * @param lines the lines read so far
+     * @param capacity the capacity of the new dataset
+     * @throws IOException if something goes wrong
+     * @see #getData()
      */
-    public ArffReader(Reader reader, Instances template, int lines, int capacity) throws IOException {
-      m_Lines     = lines;
+    public ArffReader(Reader reader, Instances template, int lines, int capacity)
+      throws IOException {
+      m_Lines = lines;
       m_Tokenizer = new StreamTokenizer(reader);
       initTokenizer();
 
@@ -208,9 +217,9 @@ public class ArffLoader
 
     /**
      * initializes the buffers for sparse instances to be read
-     *
-     * @see			#m_ValueBuffer
-     * @see			#m_IndicesBuffer
+     * 
+     * @see #m_ValueBuffer
+     * @see #m_IndicesBuffer
      */
     protected void initBuffers() {
       m_ValueBuffer = new double[m_Data.numAttributes()];
@@ -221,29 +230,30 @@ public class ArffLoader
      * compactifies the data
      */
     protected void compactify() {
-      if (m_Data != null)
+      if (m_Data != null) {
         m_Data.compactify();
+      }
     }
 
     /**
      * Throws error message with line number and last token read.
-     *
-     * @param msg 		the error message to be thrown
-     * @throws IOException 	containing the error message
+     * 
+     * @param msg the error message to be thrown
+     * @throws IOException containing the error message
      */
     protected void errorMessage(String msg) throws IOException {
       String str = msg + ", read " + m_Tokenizer.toString();
       if (m_Lines > 0) {
-	int line = Integer.parseInt(str.replaceAll(".* line ", ""));
-	str = str.replaceAll(" line .*", " line " + (m_Lines + line - 1));
+        int line = Integer.parseInt(str.replaceAll(".* line ", ""));
+        str = str.replaceAll(" line .*", " line " + (m_Lines + line - 1));
       }
       throw new IOException(str);
     }
 
     /**
      * returns the current line number
-     *
-     * @return			the current line number
+     * 
+     * @return the current line number
      */
     public int getLineNo() {
       return m_Lines + m_Tokenizer.lineno();
@@ -251,25 +261,27 @@ public class ArffLoader
 
     /**
      * Gets next token, skipping empty lines.
-     *
-     * @throws IOException 	if reading the next token fails
+     * 
+     * @throws IOException if reading the next token fails
      */
     protected void getFirstToken() throws IOException {
-      while (m_Tokenizer.nextToken() == StreamTokenizer.TT_EOL) {};
+      while (m_Tokenizer.nextToken() == StreamTokenizer.TT_EOL) {
+      }
+      ;
 
       if ((m_Tokenizer.ttype == '\'') ||
-  	(m_Tokenizer.ttype == '"')) {
+        (m_Tokenizer.ttype == '"')) {
         m_Tokenizer.ttype = StreamTokenizer.TT_WORD;
       } else if ((m_Tokenizer.ttype == StreamTokenizer.TT_WORD) &&
-  	       (m_Tokenizer.sval.equals("?"))){
+        (m_Tokenizer.sval.equals("?"))) {
         m_Tokenizer.ttype = '?';
       }
     }
 
     /**
      * Gets index, checking for a premature and of line.
-     *
-     * @throws IOException 	if it finds a premature end of line
+     * 
+     * @throws IOException if it finds a premature end of line
      */
     protected void getIndex() throws IOException {
       if (m_Tokenizer.nextToken() == StreamTokenizer.TT_EOL) {
@@ -282,32 +294,32 @@ public class ArffLoader
 
     /**
      * Gets token and checks if its end of line.
-     *
-     * @param endOfFileOk 	whether EOF is OK
-     * @throws IOException 	if it doesn't find an end of line
+     * 
+     * @param endOfFileOk whether EOF is OK
+     * @throws IOException if it doesn't find an end of line
      */
     protected void getLastToken(boolean endOfFileOk) throws IOException {
       if ((m_Tokenizer.nextToken() != StreamTokenizer.TT_EOL) &&
-  	((m_Tokenizer.ttype != StreamTokenizer.TT_EOF) || !endOfFileOk)) {
+        ((m_Tokenizer.ttype != StreamTokenizer.TT_EOF) || !endOfFileOk)) {
         errorMessage("end of line expected");
       }
     }
 
     /**
      * Gets the value of an instance's weight (if one exists)
-     *
-     * @return the value of the instance's weight, or NaN
-     * if no weight has been supplied in the file
+     * 
+     * @return the value of the instance's weight, or NaN if no weight has been
+     *         supplied in the file
      */
     protected double getInstanceWeight() throws IOException {
       double weight = Double.NaN;
       m_Tokenizer.nextToken();
       if (m_Tokenizer.ttype == StreamTokenizer.TT_EOL ||
-          m_Tokenizer.ttype == StreamTokenizer.TT_EOF) {
+        m_Tokenizer.ttype == StreamTokenizer.TT_EOF) {
         return weight;
       }
       // see if we can read an instance weight
-      //      m_Tokenizer.pushBack();
+      // m_Tokenizer.pushBack();
       if (m_Tokenizer.ttype == '{') {
         m_Tokenizer.nextToken();
         String weightS = m_Tokenizer.sval;
@@ -329,8 +341,8 @@ public class ArffLoader
 
     /**
      * Gets next token, checking for a premature and of line.
-     *
-     * @throws IOException 	if it finds a premature end of line
+     * 
+     * @throws IOException if it finds a premature end of line
      */
     protected void getNextToken() throws IOException {
       if (m_Tokenizer.nextToken() == StreamTokenizer.TT_EOL) {
@@ -339,10 +351,10 @@ public class ArffLoader
       if (m_Tokenizer.ttype == StreamTokenizer.TT_EOF) {
         errorMessage("premature end of file");
       } else if ((m_Tokenizer.ttype == '\'') ||
-  	       (m_Tokenizer.ttype == '"')) {
+        (m_Tokenizer.ttype == '"')) {
         m_Tokenizer.ttype = StreamTokenizer.TT_WORD;
       } else if ((m_Tokenizer.ttype == StreamTokenizer.TT_WORD) &&
-  	       (m_Tokenizer.sval.equals("?"))){
+        (m_Tokenizer.sval.equals("?"))) {
         m_Tokenizer.ttype = '?';
       }
     }
@@ -350,11 +362,11 @@ public class ArffLoader
     /**
      * Initializes the StreamTokenizer used for reading the ARFF file.
      */
-    protected void initTokenizer(){
+    protected void initTokenizer() {
       m_Tokenizer.resetSyntax();
       m_Tokenizer.whitespaceChars(0, ' ');
-      m_Tokenizer.wordChars(' '+1,'\u00FF');
-      m_Tokenizer.whitespaceChars(',',',');
+      m_Tokenizer.wordChars(' ' + 1, '\u00FF');
+      m_Tokenizer.whitespaceChars(',', ',');
       m_Tokenizer.commentChar('%');
       m_Tokenizer.quoteChar('"');
       m_Tokenizer.quoteChar('\'');
@@ -365,12 +377,11 @@ public class ArffLoader
 
     /**
      * Reads a single instance using the tokenizer and returns it.
-     *
-     * @param structure 	the dataset header information, will get updated
-     * 				in case of string or relational attributes
-     * @return 			null if end of file has been reached
-     * @throws IOException 	if the information is not read
-     * successfully
+     * 
+     * @param structure the dataset header information, will get updated in case
+     *          of string or relational attributes
+     * @return null if end of file has been reached
+     * @throws IOException if the information is not read successfully
      */
     public Instance readInstance(Instances structure) throws IOException {
       return readInstance(structure, true);
@@ -378,31 +389,29 @@ public class ArffLoader
 
     /**
      * Reads a single instance using the tokenizer and returns it.
-     *
-     * @param structure 	the dataset header information, will get updated
-     * 				in case of string or relational attributes
-     * @param flag 		if method should test for carriage return after
-     * 				each instance
-     * @return 			null if end of file has been reached
-     * @throws IOException 	if the information is not read
-     * successfully
+     * 
+     * @param structure the dataset header information, will get updated in case
+     *          of string or relational attributes
+     * @param flag if method should test for carriage return after each instance
+     * @return null if end of file has been reached
+     * @throws IOException if the information is not read successfully
      */
-    public Instance readInstance(Instances structure, boolean flag) throws IOException {
+    public Instance readInstance(Instances structure, boolean flag)
+      throws IOException {
       return getInstance(structure, flag);
     }
 
     /**
      * Reads a single instance using the tokenizer and returns it.
-     *
-     * @param structure 	the dataset header information, will get updated
-     * 				in case of string or relational attributes
-     * @param flag 		if method should test for carriage return after
-     * 				each instance
-     * @return 			null if end of file has been reached
-     * @throws IOException 	if the information is not read
-     * 				successfully
+     * 
+     * @param structure the dataset header information, will get updated in case
+     *          of string or relational attributes
+     * @param flag if method should test for carriage return after each instance
+     * @return null if end of file has been reached
+     * @throws IOException if the information is not read successfully
      */
-    protected Instance getInstance(Instances structure, boolean flag) throws IOException {
+    protected Instance getInstance(Instances structure, boolean flag)
+      throws IOException {
       m_Data = structure;
 
       // Check if any attributes have been declared.
@@ -426,12 +435,10 @@ public class ArffLoader
 
     /**
      * Reads a single instance using the tokenizer and returns it.
-     *
-     * @param flag 		if method should test for carriage return after
-     * 				each instance
-     * @return 			null if end of file has been reached
-     * @throws IOException 	if the information is not read
-     * 				successfully
+     * 
+     * @param flag if method should test for carriage return after each instance
+     * @return null if end of file has been reached
+     * @throws IOException if the information is not read successfully
      */
     protected Instance getInstanceSparse(boolean flag) throws IOException {
       int valIndex, numValues = 0, maxIndex = -1;
@@ -441,21 +448,22 @@ public class ArffLoader
         // Get index
         getIndex();
         if (m_Tokenizer.ttype == '}') {
-  	break;
+          break;
         }
 
         // Is index valid?
-        try{
-  	m_IndicesBuffer[numValues] = Integer.valueOf(m_Tokenizer.sval).intValue();
+        try {
+          m_IndicesBuffer[numValues] =
+            Integer.valueOf(m_Tokenizer.sval).intValue();
         } catch (NumberFormatException e) {
-  	errorMessage("index number expected");
+          errorMessage("index number expected");
         }
         if (m_IndicesBuffer[numValues] <= maxIndex) {
-  	errorMessage("indices have to be ordered");
+          errorMessage("indices have to be ordered");
         }
         if ((m_IndicesBuffer[numValues] < 0) ||
-  	  (m_IndicesBuffer[numValues] >= m_Data.numAttributes())) {
-  	errorMessage("index out of bounds");
+          (m_IndicesBuffer[numValues] >= m_Data.numAttributes())) {
+          errorMessage("index out of bounds");
         }
         maxIndex = m_IndicesBuffer[numValues];
 
@@ -463,58 +471,64 @@ public class ArffLoader
         getNextToken();
 
         // Check if value is missing.
-        if  (m_Tokenizer.ttype == '?') {
-  	m_ValueBuffer[numValues] = Instance.missingValue();
+        if (m_Tokenizer.ttype == '?') {
+          m_ValueBuffer[numValues] = Instance.missingValue();
         } else {
 
-  	// Check if token is valid.
-  	if (m_Tokenizer.ttype != StreamTokenizer.TT_WORD) {
-  	  errorMessage("not a valid value");
-  	}
+          // Check if token is valid.
+          if (m_Tokenizer.ttype != StreamTokenizer.TT_WORD) {
+            errorMessage("not a valid value");
+          }
           switch (m_Data.attribute(m_IndicesBuffer[numValues]).type()) {
-            case Attribute.NOMINAL:
-              // Check if value appears in header.
-              valIndex =
-                m_Data.attribute(m_IndicesBuffer[numValues]).indexOfValue(m_Tokenizer.sval);
-              if (valIndex == -1) {
-                errorMessage("nominal value not declared in header");
-              }
-              m_ValueBuffer[numValues] = (double)valIndex;
-              break;
-  	case Attribute.NUMERIC:
-  	  // Check if value is really a number.
-  	  try{
-  	    m_ValueBuffer[numValues] = Double.valueOf(m_Tokenizer.sval).
-  	      doubleValue();
-  	  } catch (NumberFormatException e) {
-  	    errorMessage("number expected");
-  	  }
+          case Attribute.NOMINAL:
+            // Check if value appears in header.
+            valIndex =
+              m_Data.attribute(m_IndicesBuffer[numValues]).indexOfValue(
+                m_Tokenizer.sval);
+            if (valIndex == -1) {
+              errorMessage("nominal value not declared in header");
+            }
+            m_ValueBuffer[numValues] = valIndex;
             break;
-  	case Attribute.STRING:
-  	  m_ValueBuffer[numValues] =
-  	    m_Data.attribute(m_IndicesBuffer[numValues]).addStringValue(m_Tokenizer.sval);
+          case Attribute.NUMERIC:
+            // Check if value is really a number.
+            try {
+              m_ValueBuffer[numValues] = Double.valueOf(m_Tokenizer.sval).
+                doubleValue();
+            } catch (NumberFormatException e) {
+              errorMessage("number expected");
+            }
+            break;
+          case Attribute.STRING:
+            m_ValueBuffer[numValues] =
+              m_Data.attribute(m_IndicesBuffer[numValues]).addStringValue(
+                m_Tokenizer.sval);
             break;
           case Attribute.DATE:
             try {
               m_ValueBuffer[numValues] =
-                m_Data.attribute(m_IndicesBuffer[numValues]).parseDate(m_Tokenizer.sval);
+                m_Data.attribute(m_IndicesBuffer[numValues]).parseDate(
+                  m_Tokenizer.sval);
             } catch (ParseException e) {
               errorMessage("unparseable date: " + m_Tokenizer.sval);
             }
             break;
           case Attribute.RELATIONAL:
             try {
-              ArffReader arff = new ArffReader(new StringReader(m_Tokenizer.sval), m_Data.attribute(m_IndicesBuffer[numValues]).relation(), 0);
+              ArffReader arff =
+                new ArffReader(new StringReader(m_Tokenizer.sval), m_Data
+                  .attribute(m_IndicesBuffer[numValues]).relation(), 0);
               Instances data = arff.getData();
-              m_ValueBuffer[numValues] = m_Data.attribute(m_IndicesBuffer[numValues]).addRelation(data);
-            }
-            catch (Exception e) {
+              m_ValueBuffer[numValues] =
+                m_Data.attribute(m_IndicesBuffer[numValues]).addRelation(data);
+            } catch (Exception e) {
               throw new IOException(e.toString() + " of line " + getLineNo());
             }
             break;
           default:
-            errorMessage("unknown attribute type in column " + m_IndicesBuffer[numValues]);
-  	}
+            errorMessage("unknown attribute type in column "
+              + m_IndicesBuffer[numValues]);
+          }
         }
         numValues++;
       } while (true);
@@ -535,7 +549,9 @@ public class ArffLoader
       int[] tempIndices = new int[numValues];
       System.arraycopy(m_ValueBuffer, 0, tempValues, 0, numValues);
       System.arraycopy(m_IndicesBuffer, 0, tempIndices, 0, numValues);
-      Instance inst = new SparseInstance(weight, tempValues, tempIndices, m_Data.numAttributes());
+      Instance inst =
+        new SparseInstance(weight, tempValues, tempIndices,
+          m_Data.numAttributes());
       inst.setDataset(m_Data);
 
       return inst;
@@ -543,53 +559,51 @@ public class ArffLoader
 
     /**
      * Reads a single instance using the tokenizer and returns it.
-     *
-     * @param flag 		if method should test for carriage return after
-     * 				each instance
-     * @return 			null if end of file has been reached
-     * @throws IOException 	if the information is not read
-     * 				successfully
+     * 
+     * @param flag if method should test for carriage return after each instance
+     * @return null if end of file has been reached
+     * @throws IOException if the information is not read successfully
      */
     protected Instance getInstanceFull(boolean flag) throws IOException {
       double[] instance = new double[m_Data.numAttributes()];
       int index;
 
       // Get values for all attributes.
-      for (int i = 0; i < m_Data.numAttributes(); i++){
+      for (int i = 0; i < m_Data.numAttributes(); i++) {
         // Get next token
         if (i > 0) {
-  	getNextToken();
+          getNextToken();
         }
 
         // Check if value is missing.
-        if  (m_Tokenizer.ttype == '?') {
-  	instance[i] = Instance.missingValue();
+        if (m_Tokenizer.ttype == '?') {
+          instance[i] = Instance.missingValue();
         } else {
 
-  	// Check if token is valid.
-  	if (m_Tokenizer.ttype != StreamTokenizer.TT_WORD) {
-  	  errorMessage("not a valid value");
-  	}
+          // Check if token is valid.
+          if (m_Tokenizer.ttype != StreamTokenizer.TT_WORD) {
+            errorMessage("not a valid value");
+          }
           switch (m_Data.attribute(i).type()) {
           case Attribute.NOMINAL:
-  	  // Check if value appears in header.
-  	  index = m_Data.attribute(i).indexOfValue(m_Tokenizer.sval);
-  	  if (index == -1) {
-  	    errorMessage("nominal value not declared in header");
-  	  }
-  	  instance[i] = (double)index;
+            // Check if value appears in header.
+            index = m_Data.attribute(i).indexOfValue(m_Tokenizer.sval);
+            if (index == -1) {
+              errorMessage("nominal value not declared in header");
+            }
+            instance[i] = index;
             break;
-  	case Attribute.NUMERIC:
-  	  // Check if value is really a number.
-  	  try{
-  	    instance[i] = Double.valueOf(m_Tokenizer.sval).
-  	      doubleValue();
-  	  } catch (NumberFormatException e) {
-  	    errorMessage("number expected");
-  	  }
+          case Attribute.NUMERIC:
+            // Check if value is really a number.
+            try {
+              instance[i] = Double.valueOf(m_Tokenizer.sval).
+                doubleValue();
+            } catch (NumberFormatException e) {
+              errorMessage("number expected");
+            }
             break;
-  	case Attribute.STRING:
-  	  instance[i] = m_Data.attribute(i).addStringValue(m_Tokenizer.sval);
+          case Attribute.STRING:
+            instance[i] = m_Data.attribute(i).addStringValue(m_Tokenizer.sval);
             break;
           case Attribute.DATE:
             try {
@@ -600,17 +614,18 @@ public class ArffLoader
             break;
           case Attribute.RELATIONAL:
             try {
-              ArffReader arff = new ArffReader(new StringReader(m_Tokenizer.sval), m_Data.attribute(i).relation(), 0);
+              ArffReader arff =
+                new ArffReader(new StringReader(m_Tokenizer.sval), m_Data
+                  .attribute(i).relation(), 0);
               Instances data = arff.getData();
               instance[i] = m_Data.attribute(i).addRelation(data);
-            }
-            catch (Exception e) {
+            } catch (Exception e) {
               throw new IOException(e.toString() + " of line " + getLineNo());
             }
             break;
           default:
             errorMessage("unknown attribute type in column " + i);
-  	}
+          }
         }
       }
 
@@ -634,11 +649,9 @@ public class ArffLoader
 
     /**
      * Reads and stores header of an ARFF file.
-     *
-     * @param capacity 		the number of instances to reserve in the data
-     * 				structure
-     * @throws IOException 	if the information is not read
-     * 				successfully
+     * 
+     * @param capacity the number of instances to reserve in the data structure
+     * @throws IOException if the information is not read successfully
      */
     protected void readHeader(int capacity) throws IOException {
       m_Lines = 0;
@@ -685,13 +698,13 @@ public class ArffLoader
 
     /**
      * Parses the attribute declaration.
-     *
-     * @param attributes 		the current attributes vector
-     * @return 			the new attributes vector
-     * @throws IOException 	if the information is not read
-     * 				successfully
+     * 
+     * @param attributes the current attributes vector
+     * @return the new attributes vector
+     * @throws IOException if the information is not read successfully
      */
-    protected FastVector parseAttribute(FastVector attributes) throws IOException {
+    protected FastVector parseAttribute(FastVector attributes)
+      throws IOException {
       String attributeName;
       FastVector attributeValues;
 
@@ -705,21 +718,24 @@ public class ArffLoader
 
         // Attribute is real, integer, or string.
         if (m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_REAL) ||
-            m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_INTEGER) ||
-            m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_NUMERIC)) {
-          attributes.addElement(new Attribute(attributeName, attributes.size()));
+          m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_INTEGER) ||
+          m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_NUMERIC)) {
+          attributes
+            .addElement(new Attribute(attributeName, attributes.size()));
           readTillEOL();
-        } else if (m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_STRING)) {
+        } else if (m_Tokenizer.sval
+          .equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_STRING)) {
           attributes.
-            addElement(new Attribute(attributeName, (FastVector)null,
-                attributes.size()));
+            addElement(new Attribute(attributeName, (FastVector) null,
+              attributes.size()));
           readTillEOL();
-        } else if (m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_DATE)) {
+        } else if (m_Tokenizer.sval
+          .equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_DATE)) {
           String format = null;
           if (m_Tokenizer.nextToken() != StreamTokenizer.TT_EOL) {
             if ((m_Tokenizer.ttype != StreamTokenizer.TT_WORD) &&
-                (m_Tokenizer.ttype != '\'') &&
-                (m_Tokenizer.ttype != '\"')) {
+              (m_Tokenizer.ttype != '\'') &&
+              (m_Tokenizer.ttype != '\"')) {
               errorMessage("not a valid date format");
             }
             format = m_Tokenizer.sval;
@@ -728,9 +744,10 @@ public class ArffLoader
             m_Tokenizer.pushBack();
           }
           attributes.addElement(new Attribute(attributeName, format,
-              attributes.size()));
+            attributes.size()));
 
-        } else if (m_Tokenizer.sval.equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_RELATIONAL)) {
+        } else if (m_Tokenizer.sval
+          .equalsIgnoreCase(Attribute.ARFF_ATTRIBUTE_RELATIONAL)) {
           readTillEOL();
 
           // Read attributes for subrelation
@@ -738,7 +755,8 @@ public class ArffLoader
           FastVector atts = attributes;
           attributes = new FastVector();
 
-          // Now, read attributes until we hit end of declaration of relational value
+          // Now, read attributes until we hit end of declaration of relational
+          // value
           getFirstToken();
           if (m_Tokenizer.ttype == StreamTokenizer.TT_EOF) {
             errorMessage("premature end of file");
@@ -746,16 +764,17 @@ public class ArffLoader
           do {
             if (Attribute.ARFF_ATTRIBUTE.equalsIgnoreCase(m_Tokenizer.sval)) {
               attributes = parseAttribute(attributes);
-            } else if (Attribute.ARFF_END_SUBRELATION.equalsIgnoreCase(m_Tokenizer.sval)) {
+            } else if (Attribute.ARFF_END_SUBRELATION
+              .equalsIgnoreCase(m_Tokenizer.sval)) {
               getNextToken();
               if (!attributeName.equalsIgnoreCase(m_Tokenizer.sval)) {
                 errorMessage("declaration of subrelation " + attributeName +
-                      " must be terminated by " + "@end " + attributeName);
+                  " must be terminated by " + "@end " + attributeName);
               }
               break;
             } else {
               errorMessage("declaration of subrelation " + attributeName +
-                    " must be terminated by " + "@end " + attributeName);
+                " must be terminated by " + "@end " + attributeName);
             }
           } while (true);
 
@@ -763,10 +782,10 @@ public class ArffLoader
           Instances relation = new Instances(attributeName, attributes, 0);
           attributes = atts;
           attributes.addElement(new Attribute(attributeName, relation,
-              attributes.size()));
+            attributes.size()));
         } else {
-          errorMessage("no valid attribute type or invalid "+
-                "enumeration");
+          errorMessage("no valid attribute type or invalid " +
+            "enumeration");
         }
       } else {
 
@@ -787,31 +806,34 @@ public class ArffLoader
         }
         attributes.
           addElement(new Attribute(attributeName, attributeValues,
-              attributes.size()));
+            attributes.size()));
       }
       getLastToken(false);
       getFirstToken();
-      if (m_Tokenizer.ttype == StreamTokenizer.TT_EOF)
+      if (m_Tokenizer.ttype == StreamTokenizer.TT_EOF) {
         errorMessage("premature end of file");
+      }
 
       return attributes;
     }
 
     /**
      * Reads and skips all tokens before next end of line token.
-     *
-     * @throws IOException 	in case something goes wrong
+     * 
+     * @throws IOException in case something goes wrong
      */
     protected void readTillEOL() throws IOException {
-      while (m_Tokenizer.nextToken() != StreamTokenizer.TT_EOL) {};
+      while (m_Tokenizer.nextToken() != StreamTokenizer.TT_EOL) {
+      }
+      ;
 
       m_Tokenizer.pushBack();
     }
 
     /**
      * Returns the header format
-     *
-     * @return			the header format
+     * 
+     * @return the header format
      */
     public Instances getStructure() {
       return new Instances(m_Data, 0);
@@ -819,8 +841,8 @@ public class ArffLoader
 
     /**
      * Returns the data that was read
-     *
-     * @return			the data
+     * 
+     * @return the data
      */
     public Instances getData() {
       return m_Data;
@@ -828,57 +850,62 @@ public class ArffLoader
 
     /**
      * Returns the revision string.
-     *
-     * @return		the revision
+     * 
+     * @return the revision
      */
+    @Override
     public String getRevision() {
-      return RevisionUtils.extract("$Revision: 9653 $");
+      return RevisionUtils.extract("$Revision: 11137 $");
     }
   }
 
   /**
    * Returns a string describing this Loader
-   * @return a description of the Loader suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the Loader suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "Reads a source that is in arff (attribute relation file format) "
-      +"format. ";
+      + "format. ";
   }
 
   /**
    * Get the file extension used for arff files
-   *
+   * 
    * @return the file extension
    */
+  @Override
   public String getFileExtension() {
     return FILE_EXTENSION;
   }
 
   /**
    * Gets all the file extensions used for this type of file
-   *
+   * 
    * @return the file extensions
    */
+  @Override
   public String[] getFileExtensions() {
-    return new String[]{FILE_EXTENSION, FILE_EXTENSION_COMPRESSED};
+    return new String[] { FILE_EXTENSION, FILE_EXTENSION_COMPRESSED };
   }
 
   /**
    * Returns a description of the file type.
-   *
+   * 
    * @return a short file description
    */
+  @Override
   public String getFileDescription() {
     return "Arff data files";
   }
 
   /**
-   * Resets the Loader ready to read a new data set or the
-   * same data set again.
-   *
+   * Resets the Loader ready to read a new data set or the same data set again.
+   * 
    * @throws IOException if something goes wrong
    */
+  @Override
   public void reset() throws IOException {
     m_structure = null;
     m_ArffReader = null;
@@ -892,9 +919,9 @@ public class ArffLoader
   }
 
   /**
-   * Resets the Loader object and sets the source of the data set to be
-   * the supplied url.
-   *
+   * Resets the Loader object and sets the source of the data set to be the
+   * supplied url.
+   * 
    * @param url the source url.
    * @throws IOException if an error occurs
    */
@@ -910,22 +937,23 @@ public class ArffLoader
     m_File = null;
   }
 
-
   /**
    * get the File specified as the source
-   *
+   * 
    * @return the source file
    */
+  @Override
   public File retrieveFile() {
     return new File(m_File);
   }
 
   /**
    * sets the source File
-   *
+   * 
    * @param file the source file
    * @throws IOException if an error occurs
    */
+  @Override
   public void setFile(File file) throws IOException {
     m_File = file.getPath();
     setSource(file);
@@ -933,10 +961,11 @@ public class ArffLoader
 
   /**
    * Set the url to load from
-   *
+   * 
    * @param url the url to load from
    * @throws IOException if the url can't be set.
    */
+  @Override
   public void setURL(String url) throws IOException {
     m_URL = url;
     setSource(new URL(url));
@@ -944,20 +973,22 @@ public class ArffLoader
 
   /**
    * Return the current url
-   *
+   * 
    * @return the current url
    */
+  @Override
   public String retrieveURL() {
     return m_URL;
   }
 
   /**
-   * Resets the Loader object and sets the source of the data set to be
-   * the supplied InputStream.
-   *
+   * Resets the Loader object and sets the source of the data set to be the
+   * supplied InputStream.
+   * 
    * @param in the source InputStream.
    * @throws IOException always thrown.
    */
+  @Override
   public void setSource(InputStream in) throws IOException {
     m_File = (new File(System.getProperty("user.dir"))).getAbsolutePath();
     m_URL = "http://";
@@ -966,12 +997,13 @@ public class ArffLoader
   }
 
   /**
-   * Determines and returns (if possible) the structure (internally the
-   * header) of the data set as an empty set of instances.
-   *
+   * Determines and returns (if possible) the structure (internally the header)
+   * of the data set as an empty set of instances.
+   * 
    * @return the structure of the data set as an empty set of Instances
    * @throws IOException if an error occurs
    */
+  @Override
   public Instances getStructure() throws IOException {
 
     if (m_structure == null) {
@@ -979,10 +1011,11 @@ public class ArffLoader
         throw new IOException("No source has been specified");
       }
       try {
-	m_ArffReader = new ArffReader(m_sourceReader, 1);
-	m_structure  = m_ArffReader.getStructure();
+        m_ArffReader = new ArffReader(m_sourceReader, 1);
+        m_structure = m_ArffReader.getStructure();
       } catch (Exception ex) {
-	throw new IOException("Unable to determine structure as arff (Reason: " + ex.toString() + ").");
+        throw new IOException("Unable to determine structure as arff (Reason: "
+          + ex.toString() + ").");
       }
     }
 
@@ -990,13 +1023,14 @@ public class ArffLoader
   }
 
   /**
-   * Return the full data set. If the structure hasn't yet been determined
-   * by a call to getStructure then method should do so before processing
-   * the rest of the data set.
-   *
+   * Return the full data set. If the structure hasn't yet been determined by a
+   * call to getStructure then method should do so before processing the rest of
+   * the data set.
+   * 
    * @return the structure of the data set as an empty set of Instances
    * @throws IOException if there is no source or parsing fails
    */
+  @Override
   public Instances getDataSet() throws IOException {
 
     Instances insts = null;
@@ -1005,7 +1039,8 @@ public class ArffLoader
         throw new IOException("No source has been specified");
       }
       if (getRetrieval() == INCREMENTAL) {
-        throw new IOException("Cannot mix getting Instances in both incremental and batch modes");
+        throw new IOException(
+          "Cannot mix getting Instances in both incremental and batch modes");
       }
       setRetrieval(BATCH);
       if (m_structure == null) {
@@ -1015,50 +1050,55 @@ public class ArffLoader
       // Read all instances
       Instance inst;
       insts = new Instances(m_structure, 0);
-      while ((inst = m_ArffReader.readInstance(m_structure)) != null)
+      while ((inst = m_ArffReader.readInstance(m_structure)) != null) {
         insts.add(inst);
+      }
 
       // Instances readIn = new Instances(m_structure);
     } finally {
-      // close the stream
-      m_sourceReader.close();
+      if (m_sourceReader != null) {
+        // close the stream
+        m_sourceReader.close();
+      }
     }
-    
+
     return insts;
   }
 
   /**
-   * Read the data set incrementally---get the next instance in the data
-   * set or returns null if there are no
-   * more instances to get. If the structure hasn't yet been
-   * determined by a call to getStructure then method should do so before
-   * returning the next instance in the data set.
-   *
-   * @param structure the dataset header information, will get updated in
-   * case of string or relational attributes
-   * @return the next instance in the data set as an Instance object or null
-   * if there are no more instances to be read
+   * Read the data set incrementally---get the next instance in the data set or
+   * returns null if there are no more instances to get. If the structure hasn't
+   * yet been determined by a call to getStructure then method should do so
+   * before returning the next instance in the data set.
+   * 
+   * @param structure the dataset header information, will get updated in case
+   *          of string or relational attributes
+   * @return the next instance in the data set as an Instance object or null if
+   *         there are no more instances to be read
    * @throws IOException if there is an error during parsing
    */
+  @Override
   public Instance getNextInstance(Instances structure) throws IOException {
 
     m_structure = structure;
 
     if (getRetrieval() == BATCH) {
-      throw new IOException("Cannot mix getting Instances in both incremental and batch modes");
+      throw new IOException(
+        "Cannot mix getting Instances in both incremental and batch modes");
     }
     setRetrieval(INCREMENTAL);
 
     Instance current = null;
-    if (m_sourceReader != null)
+    if (m_sourceReader != null) {
       current = m_ArffReader.readInstance(m_structure);
+    }
 
     if ((m_sourceReader != null) && (current == null)) {
       try {
         // close the stream
         m_sourceReader.close();
         m_sourceReader = null;
-        //        reset();
+        // reset();
       } catch (Exception ex) {
         ex.printStackTrace();
       }
@@ -1068,19 +1108,20 @@ public class ArffLoader
 
   /**
    * Returns the revision string.
-   *
-   * @return		the revision
+   * 
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 9653 $");
+    return RevisionUtils.extract("$Revision: 11137 $");
   }
 
   /**
    * Main method.
-   *
+   * 
    * @param args should contain the name of an input file.
    */
-  public static void main(String [] args) {
+  public static void main(String[] args) {
     runFileLoader(new ArffLoader(), args);
   }
 }
diff --git a/src/main/java/weka/core/converters/C45Saver.java b/src/main/java/weka/core/converters/C45Saver.java
index e741be0..37d2590 100644
--- a/src/main/java/weka/core/converters/C45Saver.java
+++ b/src/main/java/weka/core/converters/C45Saver.java
@@ -22,8 +22,14 @@
 
 package weka.core.converters;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
 import weka.core.Attribute;
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.FastVector;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -31,489 +37,537 @@ import weka.core.Option;
 import weka.core.OptionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
-import weka.core.Capabilities.Capability;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Enumeration;
 
 /**
- <!-- globalinfo-start -->
- * Writes to a destination that is in the format used by the C4.5 algorithm.<br/>
+ * <!-- globalinfo-start --> Writes to a destination that is in the format used
+ * by the C4.5 algorithm.<br/>
  * Therefore it outputs a names and a data file.
  * <p/>
- <!-- globalinfo-end -->
+ * <!-- globalinfo-end -->
  * 
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- options-start --> Valid options are:
+ * <p/>
  * 
- * <pre> -i <the input file>
- * The input file</pre>
+ * <pre>
+ * -i <the input file>
+ * The input file
+ * </pre>
  * 
- * <pre> -o <the output file>
- * The output file</pre>
+ * <pre>
+ * -o <the output file>
+ * The output file
+ * </pre>
  * 
- * <pre> -c <the class index>
- * The class index</pre>
+ * <pre>
+ * -c <the class index>
+ * The class index
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * @author Stefan Mutter (mutter at cs.waikato.ac.nz)
  * @version $Revision: 1.7 $
  * @see Saver
  */
-public class C45Saver 
-  extends AbstractFileSaver 
+public class C45Saver
+  extends AbstractFileSaver
   implements BatchConverter, IncrementalConverter, OptionHandler {
 
   /** for serialization */
   static final long serialVersionUID = -821428878384253377L;
-  
-  /** Constructor */  
-  public C45Saver(){
-  
-      resetOptions();
+
+  /** Constructor */
+  public C45Saver() {
+
+    resetOptions();
   }
-   
+
   /**
    * Returns a string describing this Saver
-   * @return a description of the Saver suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the Saver suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "Writes to a destination that is in the format used by the C4.5 algorithm.\nTherefore it outputs a names and a data file.";
   }
 
-  
   /**
    * Returns a description of the file type.
-   *
+   * 
    * @return a short file description
    */
+  @Override
   public String getFileDescription() {
     return "C4.5 file format";
   }
 
   /**
-   * Resets the Saver 
+   * Resets the Saver
    */
+  @Override
   public void resetOptions() {
 
     super.resetOptions();
     setFileExtension(".names");
   }
 
-  /** 
+  /**
    * Returns the Capabilities of this saver.
-   *
-   * @return            the capabilities of this object
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this object
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
-    
+
     // attributes
     result.enable(Capability.NOMINAL_ATTRIBUTES);
     result.enable(Capability.NUMERIC_ATTRIBUTES);
     result.enable(Capability.DATE_ATTRIBUTES);
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enable(Capability.NOMINAL_CLASS);
     result.enable(Capability.NUMERIC_CLASS);
     result.enable(Capability.DATE_CLASS);
     result.enable(Capability.MISSING_CLASS_VALUES);
-    
+
     return result;
   }
 
-  /** Saves an instances incrementally. Structure has to be set by using the
+  /**
+   * Saves an instances incrementally. Structure has to be set by using the
    * setStructure() method or setInstances() method.
+   * 
    * @param inst the instance to save
-   * @throws IOException throws IOEXception if an instance cannot be saved incrementally.
-   */  
-    public void writeIncremental(Instance inst) throws IOException{
-  
-      int writeMode = getWriteMode();
-      Instances structure = getInstances();
-      PrintWriter outW = null;
-      
-      if(structure != null){
-          if(structure.classIndex() == -1){
-            structure.setClassIndex(structure.numAttributes()-1);
-            System.err.println("No class specified. Last attribute is used as class attribute.");
-          }
-          if(structure.attribute(structure.classIndex()).isNumeric())
-            throw new IOException("To save in C4.5 format the class attribute cannot be numeric.");
+   * @throws IOException throws IOEXception if an instance cannot be saved
+   *           incrementally.
+   */
+  @Override
+  public void writeIncremental(Instance inst) throws IOException {
+
+    int writeMode = getWriteMode();
+    Instances structure = getInstances();
+    PrintWriter outW = null;
+
+    if (structure != null) {
+      if (structure.classIndex() == -1) {
+        structure.setClassIndex(structure.numAttributes() - 1);
+        System.err
+          .println("No class specified. Last attribute is used as class attribute.");
       }
-      if(getRetrieval() == BATCH || getRetrieval() == NONE)
-          throw new IOException("Batch and incremental saving cannot be mixed.");
-      if(retrieveFile() == null || getWriter() == null){
-          throw new IOException("C4.5 format requires two files. Therefore no output to standard out can be generated.\nPlease specifiy output files using the -o option.");
+      if (structure.attribute(structure.classIndex()).isNumeric()) {
+        throw new IOException(
+          "To save in C4.5 format the class attribute cannot be numeric.");
       }
-      
-      
-      outW = new PrintWriter(getWriter());
-          
-      if(writeMode == WAIT){
-        if(structure == null){
-            setWriteMode(CANCEL);
-            if(inst != null)
-                System.err.println("Structure(Header Information) has to be set in advance");
+    }
+    if (getRetrieval() == BATCH || getRetrieval() == NONE) {
+      throw new IOException("Batch and incremental saving cannot be mixed.");
+    }
+    if (retrieveFile() == null || getWriter() == null) {
+      throw new IOException(
+        "C4.5 format requires two files. Therefore no output to standard out can be generated.\nPlease specifiy output files using the -o option.");
+    }
+
+    outW = new PrintWriter(getWriter());
+
+    if (writeMode == WAIT) {
+      if (structure == null) {
+        setWriteMode(CANCEL);
+        if (inst != null) {
+          System.err
+            .println("Structure(Header Information) has to be set in advance");
         }
-        else
-            setWriteMode(STRUCTURE_READY);
-        writeMode = getWriteMode();
+      } else {
+        setWriteMode(STRUCTURE_READY);
       }
-      if(writeMode == CANCEL){
-          if(outW != null)
-              outW.close();
-          cancel();
+      writeMode = getWriteMode();
+    }
+    if (writeMode == CANCEL) {
+      if (outW != null) {
+        outW.close();
       }
-      if(writeMode == STRUCTURE_READY){
-          setWriteMode(WRITE);
-          //write header: here names file
-          for (int i = 0; i < structure.attribute(structure.classIndex()).numValues(); i++) {
-            outW.write(structure.attribute(structure.classIndex()).value(i));
-            if (i < structure.attribute(structure.classIndex()).numValues()-1) {
+      cancel();
+    }
+    if (writeMode == STRUCTURE_READY) {
+      setWriteMode(WRITE);
+      // write header: here names file
+      for (int i = 0; i < structure.attribute(structure.classIndex())
+        .numValues(); i++) {
+        outW.write(structure.attribute(structure.classIndex()).value(i));
+        if (i < structure.attribute(structure.classIndex()).numValues() - 1) {
+          outW.write(",");
+        } else {
+          outW.write(".\n");
+        }
+      }
+      for (int i = 0; i < structure.numAttributes(); i++) {
+        if (i != structure.classIndex()) {
+          outW.write(structure.attribute(i).name() + ": ");
+          if (structure.attribute(i).isNumeric()
+            || structure.attribute(i).isDate()) {
+            outW.write("continuous.\n");
+          } else {
+            Attribute temp = structure.attribute(i);
+            for (int j = 0; j < temp.numValues(); j++) {
+              outW.write(temp.value(j));
+              if (j < temp.numValues() - 1) {
                 outW.write(",");
-            } else {
+              } else {
                 outW.write(".\n");
-            }
-          }
-          for (int i = 0; i < structure.numAttributes(); i++) {
-            if (i != structure.classIndex()) {
-                outW.write(structure.attribute(i).name()+": ");
-                if (structure.attribute(i).isNumeric() || structure.attribute(i).isDate()) {
-                    outW.write("continuous.\n");
-                } else {
-                    Attribute temp = structure.attribute(i);
-                    for (int j = 0; j < temp.numValues(); j++) {
-                        outW.write(temp.value(j));
-                        if (j < temp.numValues()-1) {
-                            outW.write(",");
-                        } else {
-                            outW.write(".\n");
-                        }
-                    }
-                }
-            }
-          }
-          outW.flush();
-          outW.close();
-          
-          writeMode = getWriteMode();
-          
-          String out = retrieveFile().getAbsolutePath();
-          setFileExtension(".data");
-          out = out.substring(0, out.lastIndexOf('.')) + getFileExtension();
-          File namesFile = new File(out);
-          try{
-            setFile(namesFile);
-          } catch(Exception ex){
-            throw new IOException("Cannot create data file, only names file created.");
-          }
-          if(retrieveFile() == null || getWriter() == null){
-            throw new IOException("Cannot create data file, only names file created.");
-          }
-          outW = new PrintWriter(getWriter());
-      }
-      if(writeMode == WRITE){
-          if(structure == null)
-              throw new IOException("No instances information available.");
-          if(inst != null){
-            //write instance: here data file
-            for(int j = 0; j < inst.numAttributes(); j++){
-                if(j != structure.classIndex()){
-                    if (inst.isMissing(j)) {
-                        outW.write("?,");
-                    } else 
-                        if (structure.attribute(j).isNominal() || 
-                            structure.attribute(j).isString()) {
-                                outW.write(structure.attribute(j).value((int)inst.value(j))+",");
-                        } else {
-                                outW.write(""+inst.value(j)+",");
-                        }
-                    }
-            }
-            // write the class value
-            if (inst.isMissing(structure.classIndex())) {
-                outW.write("?");
-            } 
-            else {
-                outW.write(structure.attribute(structure.classIndex()).value((int)inst.value(structure.classIndex())));
-            }
-            outW.write("\n");
-            //flushes every 100 instances
-            m_incrementalCounter++;
-            if(m_incrementalCounter > 100){
-                m_incrementalCounter = 0;
-                outW.flush();
-            }
-          }
-          else{
-          //close
-              if(outW != null){
-                outW.flush();
-                outW.close();
               }
-              setFileExtension(".names");
-              m_incrementalCounter = 0;
-              resetStructure();
-              outW = null;
-              resetWriter();
+            }
           }
-      }
-  }
-
-  
-  /** 
-   * Writes a Batch of instances
-   * @throws IOException throws IOException if saving in batch mode is not possible
-   */
-  public void writeBatch() throws IOException {
-      
-      Instances instances = getInstances();
-      
-      if(instances == null)
-          throw new IOException("No instances to save");
-      if(instances.classIndex() == -1){
-          instances.setClassIndex(instances.numAttributes()-1);
-          System.err.println("No class specified. Last attribute is used as class attribute.");
-      }
-      if(instances.attribute(instances.classIndex()).isNumeric())
-          throw new IOException("To save in C4.5 format the class attribute cannot be numeric.");
-      if(getRetrieval() == INCREMENTAL)
-          throw new IOException("Batch and incremental saving cannot be mixed.");
-      
-      setRetrieval(BATCH);
-      if(retrieveFile() == null || getWriter() == null){
-          throw new IOException("C4.5 format requires two files. Therefore no output to standard out can be generated.\nPlease specifiy output files using the -o option.");
-      }
-      setWriteMode(WRITE);
-      //print names file
-      setFileExtension(".names");
-      PrintWriter outW = new PrintWriter(getWriter());
-      for (int i = 0; i < instances.attribute(instances.classIndex()).numValues(); i++) {
-        outW.write(instances.attribute(instances.classIndex()).value(i));
-        if (i < instances.attribute(instances.classIndex()).numValues()-1) {
-            outW.write(",");
-        } else {
-            outW.write(".\n");
-	}
-      }
-      for (int i = 0; i < instances.numAttributes(); i++) {
-        if (i != instances.classIndex()) {
-            outW.write(instances.attribute(i).name()+": ");
-            if (instances.attribute(i).isNumeric() || instances.attribute(i).isDate()) {
-                outW.write("continuous.\n");
-            } else {
-                Attribute temp = instances.attribute(i);
-		for (int j = 0; j < temp.numValues(); j++) {
-                    outW.write(temp.value(j));
-		    if (j < temp.numValues()-1) {
-			outW.write(",");
-		    } else {
-			outW.write(".\n");
-		    }
-		 }
-             }
         }
       }
       outW.flush();
       outW.close();
-      
-      //print data file
+
+      writeMode = getWriteMode();
+
       String out = retrieveFile().getAbsolutePath();
       setFileExtension(".data");
       out = out.substring(0, out.lastIndexOf('.')) + getFileExtension();
       File namesFile = new File(out);
-      try{
+      try {
         setFile(namesFile);
-      } catch(Exception ex){
-          throw new IOException("Cannot create data file, only names file created (Reason: " + ex.toString() + ").");
+      } catch (Exception ex) {
+        throw new IOException(
+          "Cannot create data file, only names file created.");
       }
-      if(retrieveFile() == null || getWriter() == null){
-          throw new IOException("Cannot create data file, only names file created.");
+      if (retrieveFile() == null || getWriter() == null) {
+        throw new IOException(
+          "Cannot create data file, only names file created.");
       }
       outW = new PrintWriter(getWriter());
-      // print data file
-      for (int i = 0; i < instances.numInstances(); i++) {
-	Instance temp = instances.instance(i);
-        for(int j = 0; j < temp.numAttributes(); j++){
-            if(j != instances.classIndex()){
-                if (temp.isMissing(j)) {
-		      outW.write("?,");
-		    } else if (instances.attribute(j).isNominal() || 
-			       instances.attribute(j).isString()) {
-		      outW.write(instances.attribute(j).value((int)temp.value(j))+",");
-		    } else {
-		      outW.write(""+temp.value(j)+",");
-		    }
+    }
+    if (writeMode == WRITE) {
+      if (structure == null) {
+        throw new IOException("No instances information available.");
+      }
+      if (inst != null) {
+        // write instance: here data file
+        for (int j = 0; j < inst.numAttributes(); j++) {
+          if (j != structure.classIndex()) {
+            if (inst.isMissing(j)) {
+              outW.write("?,");
+            } else if (structure.attribute(j).isNominal() ||
+              structure.attribute(j).isString()) {
+              outW.write(structure.attribute(j).value((int) inst.value(j))
+                + ",");
+            } else {
+              outW.write("" + inst.value(j) + ",");
             }
+          }
         }
         // write the class value
-        if (temp.isMissing(instances.classIndex())) {
-            outW.write("?");
-        } 
+        if (inst.isMissing(structure.classIndex())) {
+          outW.write("?");
+        }
         else {
-            outW.write(instances.attribute(instances.classIndex()).value((int)temp.value(instances.classIndex())));
+          outW.write(structure.attribute(structure.classIndex()).value(
+            (int) inst.value(structure.classIndex())));
         }
         outW.write("\n");
+        // flushes every 100 instances
+        m_incrementalCounter++;
+        if (m_incrementalCounter > 100) {
+          m_incrementalCounter = 0;
+          outW.flush();
+        }
       }
-      outW.flush();
-      outW.close();
-      setFileExtension(".names");
-      setWriteMode(WAIT);
-      outW = null;
-      resetWriter();
-      setWriteMode(CANCEL);
+      else {
+        // close
+        if (outW != null) {
+          outW.flush();
+          outW.close();
+        }
+        setFileExtension(".names");
+        m_incrementalCounter = 0;
+        resetStructure();
+        outW = null;
+        resetWriter();
+      }
+    }
+  }
+
+  /**
+   * Writes a Batch of instances
+   * 
+   * @throws IOException throws IOException if saving in batch mode is not
+   *           possible
+   */
+  @Override
+  public void writeBatch() throws IOException {
+
+    Instances instances = getInstances();
+
+    if (instances == null) {
+      throw new IOException("No instances to save");
+    }
+    if (instances.classIndex() == -1) {
+      instances.setClassIndex(instances.numAttributes() - 1);
+      System.err
+        .println("No class specified. Last attribute is used as class attribute.");
+    }
+    if (instances.attribute(instances.classIndex()).isNumeric()) {
+      throw new IOException(
+        "To save in C4.5 format the class attribute cannot be numeric.");
+    }
+    if (getRetrieval() == INCREMENTAL) {
+      throw new IOException("Batch and incremental saving cannot be mixed.");
+    }
+
+    setRetrieval(BATCH);
+    if (retrieveFile() == null || getWriter() == null) {
+      throw new IOException(
+        "C4.5 format requires two files. Therefore no output to standard out can be generated.\nPlease specifiy output files using the -o option.");
+    }
+    setWriteMode(WRITE);
+    // print names file
+    setFileExtension(".names");
+    PrintWriter outW = new PrintWriter(getWriter());
+    for (int i = 0; i < instances.attribute(instances.classIndex()).numValues(); i++) {
+      outW.write(instances.attribute(instances.classIndex()).value(i));
+      if (i < instances.attribute(instances.classIndex()).numValues() - 1) {
+        outW.write(",");
+      } else {
+        outW.write(".\n");
+      }
+    }
+    for (int i = 0; i < instances.numAttributes(); i++) {
+      if (i != instances.classIndex()) {
+        outW.write(instances.attribute(i).name() + ": ");
+        if (instances.attribute(i).isNumeric()
+          || instances.attribute(i).isDate()) {
+          outW.write("continuous.\n");
+        } else {
+          Attribute temp = instances.attribute(i);
+          for (int j = 0; j < temp.numValues(); j++) {
+            outW.write(temp.value(j));
+            if (j < temp.numValues() - 1) {
+              outW.write(",");
+            } else {
+              outW.write(".\n");
+            }
+          }
+        }
+      }
+    }
+    outW.flush();
+    outW.close();
+
+    // print data file
+    String out = retrieveFile().getAbsolutePath();
+    setFileExtension(".data");
+    out = out.substring(0, out.lastIndexOf('.')) + getFileExtension();
+    File namesFile = new File(out);
+    try {
+      setFile(namesFile);
+    } catch (Exception ex) {
+      throw new IOException(
+        "Cannot create data file, only names file created (Reason: "
+          + ex.toString() + ").");
+    }
+    if (retrieveFile() == null || getWriter() == null) {
+      throw new IOException("Cannot create data file, only names file created.");
+    }
+    outW = new PrintWriter(getWriter());
+    // print data file
+    for (int i = 0; i < instances.numInstances(); i++) {
+      Instance temp = instances.instance(i);
+      for (int j = 0; j < temp.numAttributes(); j++) {
+        if (j != instances.classIndex()) {
+          if (temp.isMissing(j)) {
+            outW.write("?,");
+          } else if (instances.attribute(j).isNominal() ||
+            instances.attribute(j).isString()) {
+            outW.write(instances.attribute(j).value((int) temp.value(j)) + ",");
+          } else {
+            outW.write("" + temp.value(j) + ",");
+          }
+        }
+      }
+      // write the class value
+      if (temp.isMissing(instances.classIndex())) {
+        outW.write("?");
+      }
+      else {
+        outW.write(instances.attribute(instances.classIndex()).value(
+          (int) temp.value(instances.classIndex())));
+      }
+      outW.write("\n");
+    }
+    outW.flush();
+    outW.close();
+    setFileExtension(".names");
+    setWriteMode(WAIT);
+    outW = null;
+    resetWriter();
+    setWriteMode(CANCEL);
   }
-  
-  
+
   /**
    * Returns an enumeration describing the available options.
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
     FastVector result = new FastVector();
 
     Enumeration en = super.listOptions();
-    while (en.hasMoreElements())
+    while (en.hasMoreElements()) {
       result.addElement(en.nextElement());
+    }
 
     result.addElement(new Option(
-	"The class index", 
-	"c", 1, "-c <the class index>"));
-    
+      "The class index",
+      "c", 1, "-c <the class index>"));
+
     return result.elements();
   }
 
- 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -i <the input file>
-   * The input file</pre>
+   * <pre>
+   * -i <the input file>
+   * The input file
+   * </pre>
    * 
-   * <pre> -o <the output file>
-   * The output file</pre>
+   * <pre>
+   * -o <the output file>
+   * The output file
+   * </pre>
    * 
-   * <pre> -c <the class index>
-   * The class index</pre>
+   * <pre>
+   * -c <the class index>
+   * The class index
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
-   * @throws Exception if an option is not supported 
+   * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     String outputString = Utils.getOption('o', options);
     String inputString = Utils.getOption('i', options);
     String indexString = Utils.getOption('c', options);
-    
+
     ArffLoader loader = new ArffLoader();
-    
+
     resetOptions();
 
     // parse index
     int index = -1;
-    if (indexString.length() != 0){
-      if(indexString.equals("first"))
-	index = 0;
-      else {
-	if (indexString.equals("last"))
-	  index = -1;
-	else
-	  index = Integer.parseInt(indexString);
+    if (indexString.length() != 0) {
+      if (indexString.equals("first")) {
+        index = 0;
+      } else {
+        if (indexString.equals("last")) {
+          index = -1;
+        } else {
+          index = Integer.parseInt(indexString);
+        }
       }
     }
-    
-    if (inputString.length() != 0){
+
+    if (inputString.length() != 0) {
       try {
-	File input = new File(inputString);
-	loader.setFile(input);
-	Instances inst = loader.getDataSet();
-	if (index == -1)
-	  inst.setClassIndex(inst.numAttributes() - 1);
-	else
-	  inst.setClassIndex(index);
-	setInstances(inst);
-      } catch(Exception ex){
-	throw new IOException("No data set loaded. Data set has to be arff format (Reason: " + ex.toString() + ").");
+        File input = new File(inputString);
+        loader.setFile(input);
+        Instances inst = loader.getDataSet();
+        if (index == -1) {
+          inst.setClassIndex(inst.numAttributes() - 1);
+        } else {
+          inst.setClassIndex(index);
+        }
+        setInstances(inst);
+      } catch (Exception ex) {
+        throw new IOException(
+          "No data set loaded. Data set has to be arff format (Reason: "
+            + ex.toString() + ").");
       }
     }
-    else
-      throw new IOException("No data set to save.");
-
-    if (outputString.length() != 0){ 
-      //add appropriate file extension
-      if (!outputString.endsWith(getFileExtension())){
-	if (outputString.lastIndexOf('.') != -1)
-	  outputString = (outputString.substring(0,outputString.lastIndexOf('.'))) + getFileExtension();
-	else
-	  outputString = outputString + getFileExtension();
+
+    if (outputString.length() != 0) {
+      // add appropriate file extension
+      if (!outputString.endsWith(getFileExtension())) {
+        if (outputString.lastIndexOf('.') != -1) {
+          outputString =
+            (outputString.substring(0, outputString.lastIndexOf('.')))
+              + getFileExtension();
+        } else {
+          outputString = outputString + getFileExtension();
+        }
       }
       try {
-	File output = new File(outputString);
-	setFile(output);
-      } catch(Exception ex){
-	throw new IOException("Cannot create output file.");
+        File output = new File(outputString);
+        setFile(output);
+      } catch (Exception ex) {
+        throw new IOException("Cannot create output file.");
       }
     }
 
-    if (index == -1)
-      index = getInstances().numAttributes() - 1;
-    getInstances().setClassIndex(index);
+    if (getInstances() != null) {
+      if (index == -1) {
+        index = getInstances().numAttributes() - 1;
+      }
+      getInstances().setClassIndex(index);
+    }
   }
 
   /**
    * Gets the current settings of the C45Saver object.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] options = new String [10];
+    String[] options = new String[10];
     int current = 0;
-    if(retrieveFile() != null){
-        options[current++] = "-o"; options[current++] = "" + retrieveFile();
-    }
-    else{
-        options[current++] = "-o"; options[current++] = "";
+    if (retrieveFile() != null) {
+      options[current++] = "-o";
+      options[current++] = "" + retrieveFile();
     }
-    if(getInstances() != null){
-        options[current++] = "-i"; options[current++] = "" + getInstances().relationName();
-        options[current++] = "-c"; options[current++] = "" + getInstances().classIndex();
-    }
-    else{
-        options[current++] = "-i"; options[current++] = "";
-        options[current++] = "-c"; options[current++] = "";
+
+    if (getInstances() != null) {
+      options[current++] = "-i";
+      options[current++] = "" + getInstances().relationName();
+      options[current++] = "-c";
+      options[current++] = "" + getInstances().classIndex();
     }
+
     while (current < options.length) {
       options[current++] = "";
     }
     return options;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
     return RevisionUtils.extract("$Revision: 1.7 $");
   }
-  
+
   /**
    * Main method.
-   *
+   * 
    * @param args should contain the options of a Saver.
    */
   public static void main(String[] args) {
diff --git a/src/main/java/weka/core/converters/DatabaseLoader.java b/src/main/java/weka/core/converters/DatabaseLoader.java
index 897ff4e..6d5b48b 100644
--- a/src/main/java/weka/core/converters/DatabaseLoader.java
+++ b/src/main/java/weka/core/converters/DatabaseLoader.java
@@ -91,7 +91,7 @@ import java.util.Vector;
  <!-- options-end -->
  *
  * @author Stefan Mutter (mutter at cs.waikato.ac.nz)
- * @version $Revision: 9100 $
+ * @version $Revision: 11199 $
  * @see Loader
  */
 public class DatabaseLoader 
@@ -114,7 +114,7 @@ public class DatabaseLoader
   private DatabaseConnection m_DataBaseConnection;
   
   /** The user defined query to load instances. (form: SELECT *|&ltcolumn-list> FROM &lttable> [WHERE <condition>]) */
-  private String m_query = "Select * from Results0";
+  private String m_query = "SELECT * FROM Results0";
   
   /** Flag indicating that pseudo incremental mode is used (all instances load at once into main memeory and then incrementally from main memory instead of the database) */
   private boolean m_pseudoIncremental;
@@ -1372,7 +1372,7 @@ public class DatabaseLoader
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 9100 $");
+    return RevisionUtils.extract("$Revision: 11199 $");
   }
 
   /** Main method.
diff --git a/src/main/java/weka/core/converters/LibSVMLoader.java b/src/main/java/weka/core/converters/LibSVMLoader.java
index a19726e..5ce26c2 100644
--- a/src/main/java/weka/core/converters/LibSVMLoader.java
+++ b/src/main/java/weka/core/converters/LibSVMLoader.java
@@ -22,13 +22,6 @@
 
 package weka.core.converters;
 
-import weka.core.Attribute;
-import weka.core.FastVector;
-import weka.core.Instance;
-import weka.core.Instances;
-import weka.core.RevisionUtils;
-import weka.core.SparseInstance;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -39,22 +32,28 @@ import java.net.URL;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
+import weka.core.Attribute;
+import weka.core.FastVector;
+import weka.core.Instance;
+import weka.core.Instances;
+import weka.core.RevisionUtils;
+import weka.core.SparseInstance;
+
 /**
- <!-- globalinfo-start -->
- * Reads a source that is in libsvm format.<br/>
+ * <!-- globalinfo-start --> Reads a source that is in libsvm format.<br/>
  * <br/>
  * For more information about libsvm see:<br/>
  * <br/>
  * http://www.csie.ntu.edu.tw/~cjlin/libsvm/
  * <p/>
- <!-- globalinfo-end -->
- *
+ * <!-- globalinfo-end -->
+ * 
  * @author FracPete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 4853 $
+ * @version $Revision: 11362 $
  * @see Loader
  */
-public class LibSVMLoader 
-  extends AbstractFileLoader 
+public class LibSVMLoader
+  extends AbstractFileLoader
   implements BatchConverter, URLSourcedLoader {
 
   /** for serialization. */
@@ -71,43 +70,46 @@ public class LibSVMLoader
 
   /** the buffer of the rows read so far. */
   protected Vector m_Buffer = null;
-  
+
   /**
    * Returns a string describing this Loader.
    * 
-   * @return 		a description of the Loader suitable for
-   * 			displaying in the explorer/experimenter gui
+   * @return a description of the Loader suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
-    return 
-        "Reads a source that is in libsvm format.\n\n"
+    return
+    "Reads a source that is in libsvm format.\n\n"
       + "For more information about libsvm see:\n\n"
       + "http://www.csie.ntu.edu.tw/~cjlin/libsvm/";
   }
 
   /**
    * Get the file extension used for libsvm files.
-   *
-   * @return 		the file extension
+   * 
+   * @return the file extension
    */
+  @Override
   public String getFileExtension() {
     return FILE_EXTENSION;
   }
 
   /**
    * Gets all the file extensions used for this type of file.
-   *
+   * 
    * @return the file extensions
    */
+  @Override
   public String[] getFileExtensions() {
-    return new String[]{getFileExtension()};
+    return new String[] { getFileExtension() };
   }
 
   /**
    * Returns a description of the file type.
-   *
-   * @return 		a short file description
+   * 
+   * @return a short file description
    */
+  @Override
   public String getFileDescription() {
     return "libsvm data files";
   }
@@ -115,14 +117,15 @@ public class LibSVMLoader
   /**
    * Resets the Loader ready to read a new data set.
    * 
-   * @throws IOException 	if something goes wrong
+   * @throws IOException if something goes wrong
    */
+  @Override
   public void reset() throws IOException {
     m_structure = null;
-    m_Buffer    = null;
-    
+    m_Buffer = null;
+
     setRetrieval(NONE);
-    
+
     if ((m_File != null) && (new File(m_File)).isFile()) {
       setFile(new File(m_File));
     }
@@ -132,18 +135,18 @@ public class LibSVMLoader
   }
 
   /**
-   * Resets the Loader object and sets the source of the data set to be 
-   * the supplied url.
-   *
-   * @param url 	the source url.
-   * @throws IOException 	if an error occurs
+   * Resets the Loader object and sets the source of the data set to be the
+   * supplied url.
+   * 
+   * @param url the source url.
+   * @throws IOException if an error occurs
    */
   public void setSource(URL url) throws IOException {
     m_structure = null;
-    m_Buffer    = null;
-    
+    m_Buffer = null;
+
     setRetrieval(NONE);
-    
+
     setSource(url.openStream());
 
     m_URL = url.toString();
@@ -151,10 +154,11 @@ public class LibSVMLoader
 
   /**
    * Set the url to load from.
-   *
-   * @param url 		the url to load from
-   * @throws IOException 		if the url can't be set.
+   * 
+   * @param url the url to load from
+   * @throws IOException if the url can't be set.
    */
+  @Override
   public void setURL(String url) throws IOException {
     m_URL = url;
     setSource(new URL(url));
@@ -162,204 +166,236 @@ public class LibSVMLoader
 
   /**
    * Return the current url.
-   *
+   * 
    * @return the current url
    */
+  @Override
   public String retrieveURL() {
     return m_URL;
   }
 
   /**
-   * Resets the Loader object and sets the source of the data set to be 
-   * the supplied InputStream.
-   *
-   * @param in 			the source InputStream.
-   * @throws IOException 	if initialization of reader fails.
+   * Resets the Loader object and sets the source of the data set to be the
+   * supplied InputStream.
+   * 
+   * @param in the source InputStream.
+   * @throws IOException if initialization of reader fails.
    */
+  @Override
   public void setSource(InputStream in) throws IOException {
     m_File = (new File(System.getProperty("user.dir"))).getAbsolutePath();
-    m_URL  = "http://";
+    m_URL = "http://";
 
     m_sourceReader = new BufferedReader(new InputStreamReader(in));
   }
 
   /**
-   * turns a libsvm row into a double array with the class as the last
-   * entry.
+   * turns a libsvm row into a double array with the class as the last entry.
    * 
-   * @param row		the row to turn into a double array
-   * @return		the corresponding double array
+   * @param row the row to turn into a double array
+   * @return the corresponding double array
    */
   protected double[] libsvmToArray(String row) {
-    double[]		result;
-    StringTokenizer	tok;
-    int			index;
-    int			max;
-    String		col;
-    double		value;
+    double[] result;
+    StringTokenizer tok;
+    int index;
+    int max;
+    String col;
+    double value;
 
     // determine max index
     max = 0;
     tok = new StringTokenizer(row, " \t");
-    tok.nextToken();  // skip class
+    tok.nextToken(); // skip class
     while (tok.hasMoreTokens()) {
-      col   = tok.nextToken();
+      col = tok.nextToken();
       index = Integer.parseInt(col.substring(0, col.indexOf(":")));
-      if (index > max)
-	max = index;
+      if (index > max) {
+        max = index;
+      }
     }
 
     // read values into array
-    tok    = new StringTokenizer(row, " \t");
+    tok = new StringTokenizer(row, " \t");
     result = new double[max + 1];
-    
+
     // 1. class
     result[result.length - 1] = Double.parseDouble(tok.nextToken());
-    
+
     // 2. attributes
     while (tok.hasMoreTokens()) {
-      col   = tok.nextToken();
+      col = tok.nextToken();
       index = Integer.parseInt(col.substring(0, col.indexOf(":")));
       value = Double.parseDouble(col.substring(col.indexOf(":") + 1));
       result[index - 1] = value;
     }
-    
+
     return result;
   }
-  
+
   /**
    * determines the number of attributes, if the number of attributes in the
    * given row is greater than the current amount then this number will be
    * returned, otherwise the current number.
    * 
-   * @param row		row to determine the number of attributes from
-   * @param num		the current number of attributes
-   * @return 		the new number of attributes
+   * @param row row to determine the number of attributes from
+   * @param num the current number of attributes
+   * @return the new number of attributes
    */
   protected int determineNumAttributes(String row, int num) {
-    int		result;
-    int		count;
-    
+    int result;
+    int count;
+
     result = num;
-    
+
     count = libsvmToArray(row).length;
-    if (count > result)
+    if (count > result) {
       result = count;
-    
+    }
+
     return result;
   }
-  
+
   /**
-   * Determines and returns (if possible) the structure (internally the 
-   * header) of the data set as an empty set of instances.
-   *
-   * @return 			the structure of the data set as an empty set 
-   * 				of Instances
-   * @throws IOException 	if an error occurs
+   * Determines and returns (if possible) the structure (internally the header)
+   * of the data set as an empty set of instances.
+   * 
+   * @return the structure of the data set as an empty set of Instances
+   * @throws IOException if an error occurs
    */
+  @Override
   public Instances getStructure() throws IOException {
-    StringBuffer	line;
-    int			cInt;
-    char		c;
-    int			numAtt;
-    FastVector		atts;
-    int			i;
-    String		relName;
-    
-    if (m_sourceReader == null)
+    String line;
+    int cInt;
+    char c;
+    int numAtt;
+    FastVector atts;
+    int i;
+    String relName;
+
+    if (m_sourceReader == null) {
       throw new IOException("No source has been specified");
+    }
 
     if (m_structure == null) {
       m_Buffer = new Vector();
       try {
-	// determine number of attributes
-	numAtt = 0;
-	line   = new StringBuffer();
-	while ((cInt = m_sourceReader.read()) != -1) {
-	  c = (char) cInt;
-	  if ((c == '\n') || (c == '\r')) {
-	    if (line.length() > 0) {
-	      m_Buffer.add(libsvmToArray(line.toString()));
-	      numAtt = determineNumAttributes(line.toString(), numAtt);
-	    }
-	    line = new StringBuffer();
-	  }
-	  else {
-	    line.append(c);
-	  }
-	}
-	
-	// last line?
-	if (line.length() != 0) {
-	  m_Buffer.add(libsvmToArray(line.toString()));
-	  numAtt = determineNumAttributes(line.toString(), numAtt);
-	}
-	
-	// generate header
-	atts = new FastVector(numAtt);
-	for (i = 0; i < numAtt - 1; i++)
-	  atts.addElement(new Attribute("att_" + (i+1)));
-	atts.addElement(new Attribute("class"));
-	
-	if (!m_URL.equals("http://"))
-	  relName = m_URL;
-	else
-	  relName = m_File;
-	
-	m_structure = new Instances(relName, atts, 0);
-	m_structure.setClassIndex(m_structure.numAttributes() - 1);
-      }
-      catch (Exception ex) {
-	ex.printStackTrace();
-	throw new IOException("Unable to determine structure as libsvm: " + ex);
+        // determine number of attributes
+        numAtt = 0;
+        int len = 1024 * 1024 * 8; // 8 MB
+        char[] cbuf = new char[len];
+        int iter = 0;
+        String linesplitter = null;
+        String[] lines;
+        String oldLine = null;
+        String read = null;
+        while ((cInt = m_sourceReader.read(cbuf, 0, len)) != -1) {
+          read = String.valueOf(cbuf, 0, cInt);
+
+          if (oldLine != null) {
+            read = oldLine + read;
+          }
+
+          if (linesplitter == null) {
+            if (read.contains("\r\n")) {
+              linesplitter = "\r\n";
+            } else if (read.contains("\n")) {
+              linesplitter = "\n";
+            }
+          }
+
+          if (linesplitter != null) {
+            lines = read.split(linesplitter, -1);
+          } else {
+            lines = new String[] { read };
+          }
+
+          for (int j = 0; j < lines.length - 1; j++) {
+            line = lines[j];
+
+            m_Buffer.add(libsvmToArray(line));
+            numAtt = determineNumAttributes(line, numAtt);
+          }
+
+          oldLine = lines[lines.length - 1];
+        }
+
+        // last line?
+        if (oldLine != null && oldLine.length() != 0) {
+          m_Buffer.add(libsvmToArray(oldLine));
+          numAtt = determineNumAttributes(oldLine, numAtt);
+        }
+
+        // generate header
+        atts = new FastVector(numAtt);
+        for (i = 0; i < numAtt - 1; i++) {
+          atts.addElement(new Attribute("att_" + (i + 1)));
+        }
+        atts.addElement(new Attribute("class"));
+
+        if (!m_URL.equals("http://")) {
+          relName = m_URL;
+        } else {
+          relName = m_File;
+        }
+
+        m_structure = new Instances(relName, atts, 0);
+        m_structure.setClassIndex(m_structure.numAttributes() - 1);
+      } catch (Exception ex) {
+        ex.printStackTrace();
+        throw new IOException("Unable to determine structure as libsvm: " + ex);
       }
     }
 
     return new Instances(m_structure, 0);
   }
-  
+
   /**
-   * Return the full data set. If the structure hasn't yet been determined
-   * by a call to getStructure then method should do so before processing
-   * the rest of the data set.
-   *
-   * @return 			the structure of the data set as an empty 
-   * 				set of Instances
-   * @throws IOException 	if there is no source or parsing fails
+   * Return the full data set. If the structure hasn't yet been determined by a
+   * call to getStructure then method should do so before processing the rest of
+   * the data set.
+   * 
+   * @return the structure of the data set as an empty set of Instances
+   * @throws IOException if there is no source or parsing fails
    */
+  @Override
   public Instances getDataSet() throws IOException {
-    Instances 	result;
-    double[]	sparse;
-    double[]	data;
-    int		i;
+    Instances result;
+    double[] sparse;
+    double[] data;
+    int i;
 
-    if (m_sourceReader == null)
+    if (m_sourceReader == null) {
       throw new IOException("No source has been specified");
-    
-    if (getRetrieval() == INCREMENTAL)
-      throw new IOException("Cannot mix getting Instances in both incremental and batch modes");
+    }
+
+    if (getRetrieval() == INCREMENTAL) {
+      throw new IOException(
+        "Cannot mix getting Instances in both incremental and batch modes");
+    }
 
     setRetrieval(BATCH);
-    if (m_structure == null)
+    if (m_structure == null) {
       getStructure();
+    }
 
     result = new Instances(m_structure, 0);
 
     // create instances from buffered arrays
     for (i = 0; i < m_Buffer.size(); i++) {
       sparse = (double[]) m_Buffer.get(i);
-      
+
       if (sparse.length != m_structure.numAttributes()) {
-	data = new double[m_structure.numAttributes()];
-	// attributes
-	System.arraycopy(sparse, 0, data, 0, sparse.length - 1);
-	// class
-	data[data.length - 1] = sparse[sparse.length - 1];
+        data = new double[m_structure.numAttributes()];
+        // attributes
+        System.arraycopy(sparse, 0, data, 0, sparse.length - 1);
+        // class
+        data[data.length - 1] = sparse[sparse.length - 1];
       }
       else {
-	data = sparse;
+        data = sparse;
       }
-      
+
       result.add(new SparseInstance(1, data));
     }
 
@@ -369,35 +405,37 @@ public class LibSVMLoader
     } catch (Exception ex) {
 
     }
-    
+
     return result;
   }
 
   /**
    * LibSVmLoader is unable to process a data set incrementally.
-   *
-   * @param structure 		ignored
-   * @return 			never returns without throwing an exception
-   * @throws IOException 	always. LibSVMLoader is unable to process a 
-   * 				data set incrementally.
+   * 
+   * @param structure ignored
+   * @return never returns without throwing an exception
+   * @throws IOException always. LibSVMLoader is unable to process a data set
+   *           incrementally.
    */
+  @Override
   public Instance getNextInstance(Instances structure) throws IOException {
     throw new IOException("LibSVMLoader can't read data sets incrementally.");
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 4853 $");
+    return RevisionUtils.extract("$Revision: 11362 $");
   }
 
   /**
    * Main method.
-   *
-   * @param args 	should contain the name of an input file.
+   * 
+   * @param args should contain the name of an input file.
    */
   public static void main(String[] args) {
     runFileLoader(new LibSVMLoader(), args);
diff --git a/src/main/java/weka/core/converters/TextDirectoryLoader.java b/src/main/java/weka/core/converters/TextDirectoryLoader.java
index 68a4cb7..41a3a2c 100644
--- a/src/main/java/weka/core/converters/TextDirectoryLoader.java
+++ b/src/main/java/weka/core/converters/TextDirectoryLoader.java
@@ -72,7 +72,7 @@ import weka.core.Utils;
  * @author Ashraf M. Kibriya (amk14 at cs.waikato.ac.nz)
  * @author Richard Kirkby (rkirkby at cs.waikato.ac.nz)
  * @author fracpete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 7088 $
+ * @version $Revision: 11199 $
  * @see Loader
  */
 public class TextDirectoryLoader
@@ -180,7 +180,10 @@ public class TextDirectoryLoader
     
     setOutputFilename(Utils.getFlag("F", options));
     
-    setDirectory(new File(Utils.getOption("dir", options)));
+    String dir = Utils.getOption("dir", options);
+    if (dir.length() > 0) {
+      setDirectory(new File(dir));
+    }
     
     String charSet = Utils.getOption("charset", options);
     m_charSet = "";
@@ -484,7 +487,7 @@ public class TextDirectoryLoader
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 7088 $");
+    return RevisionUtils.extract("$Revision: 11199 $");
   }
   
   /**
diff --git a/src/main/java/weka/core/matrix/FlexibleDecimalFormat.java b/src/main/java/weka/core/matrix/FlexibleDecimalFormat.java
index a2c61b5..e6c5bb6 100644
--- a/src/main/java/weka/core/matrix/FlexibleDecimalFormat.java
+++ b/src/main/java/weka/core/matrix/FlexibleDecimalFormat.java
@@ -21,209 +21,230 @@
 
 package weka.core.matrix;
 
-import weka.core.RevisionHandler;
-import weka.core.RevisionUtils;
-
 import java.text.DecimalFormat;
 import java.text.FieldPosition;
 
+import weka.core.RevisionHandler;
+import weka.core.RevisionUtils;
+
 /**
  * @author Yong Wang
  * @version $Revision: 1.4 $
  */
-public class FlexibleDecimalFormat
-  extends DecimalFormat
-  implements RevisionHandler {
+public class FlexibleDecimalFormat extends DecimalFormat implements
+  RevisionHandler {
 
   /** for serialization */
   private static final long serialVersionUID = 110912192794064140L;
 
   private DecimalFormat nf = null;
-  private int      digits = 7;
-  private boolean  exp = false; 
-  private int      intDigits = 1;
-  private int      decimalDigits = 0;
-  private int      expIntDigits = 1;          // ??? 
-  private int      expDecimalDigits = 0;      // ???
-  private int      power = 2;
-  private boolean  trailing = false;
-  private boolean  grouping = false;
-  private boolean  sign = false;
-    
-  public FlexibleDecimalFormat ( ) {
-    this( 5 );
-  }
-
-  public FlexibleDecimalFormat ( int digits ) {
-    if( digits < 1 ) 
+  private int digits = 7;
+  private boolean exp = false;
+  private int intDigits = 1;
+  private int decimalDigits = 0;
+  private int expDecimalDigits = 0; // ???
+  private int power = 2;
+  private boolean trailing = false;
+  private boolean grouping = false;
+  private boolean sign = false;
+
+  public FlexibleDecimalFormat() {
+    this(5);
+  }
+
+  public FlexibleDecimalFormat(int digits) {
+    if (digits < 1) {
       throw new IllegalArgumentException("digits < 1");
+    }
     this.digits = digits;
     intDigits = 1;
   }
 
-  public FlexibleDecimalFormat ( int digits, boolean trailing ) {
-    this( digits );
+  public FlexibleDecimalFormat(int digits, boolean trailing) {
+    this(digits);
     this.trailing = trailing;
   }
 
-  public FlexibleDecimalFormat ( int digits, boolean exp, boolean trailing, 
-				 boolean grouping ) {
+  public FlexibleDecimalFormat(int digits, boolean exp, boolean trailing,
+    boolean grouping) {
     this.trailing = trailing;
     this.exp = exp;
     this.digits = digits;
     this.grouping = grouping;
-    if( exp ) {
+    if (exp) {
       this.intDigits = 1;
       this.decimalDigits = digits - intDigits;
-    }
-    else {
+    } else {
       this.decimalDigits = decimalDigits;
-      this.intDigits = Math.max( 1, digits - decimalDigits );
+      this.intDigits = Math.max(1, digits - decimalDigits);
     }
   }
 
-  public FlexibleDecimalFormat ( double d ) {
-    newFormat( d );
+  public FlexibleDecimalFormat(double d) {
+    newFormat(d);
   }
 
-  private void newFormat ( double d ) {
-    if( needExponentialFormat( d ) ) {
+  private void newFormat(double d) {
+    if (needExponentialFormat(d)) {
       exp = true;
       intDigits = 1;
-      expDecimalDigits = decimalDigits( d, true );
-      if( d < 0) sign = true;
-      else sign = false;
-    }
-    else {
+      expDecimalDigits = decimalDigits(d, true);
+      if (d < 0) {
+        sign = true;
+      } else {
+        sign = false;
+      }
+    } else {
       exp = false;
-      intDigits = Math.max(1, intDigits( d ));
-      decimalDigits = decimalDigits( d, false );
-      if( d < 0.0 ) sign = true;
-      else sign = false;
+      intDigits = Math.max(1, intDigits(d));
+      decimalDigits = decimalDigits(d, false);
+      if (d < 0.0) {
+        sign = true;
+      } else {
+        sign = false;
+      }
     }
   }
 
-  public void update ( double d ) {
-    if( Math.abs( intDigits(d) -1 ) > 99 ) power = 3;
-    expIntDigits = 1;
-    expDecimalDigits = Math.max( expDecimalDigits, 
-				 decimalDigits( d, true ));
-    if( d < 0) sign = true;
-    if( needExponentialFormat( d ) || exp ) {
-      exp = true;
+  public void update(double d) {
+    if (Math.abs(intDigits(d) - 1) > 99) {
+      power = 3;
+    }
+    expDecimalDigits = Math.max(expDecimalDigits, decimalDigits(d, true));
+    if (d < 0) {
+      sign = true;
     }
-    else {
-      intDigits = Math.max(intDigits, intDigits( d ));
-      decimalDigits = Math.max(decimalDigits, decimalDigits( d, false ));
-      if( d < 0) sign = true;
+    if (needExponentialFormat(d) || exp) {
+      exp = true;
+    } else {
+      intDigits = Math.max(intDigits, intDigits(d));
+      decimalDigits = Math.max(decimalDigits, decimalDigits(d, false));
+      if (d < 0) {
+        sign = true;
+      }
     }
   }
 
-  private static int intDigits ( double d ) {
-    return (int) Math.floor( Math.log( Math.abs( d * (1 + 1e-14) ) ) / 
-			     Math.log ( 10 ) ) + 1;
+  private static int intDigits(double d) {
+    return (int) Math.floor(Math.log(Math.abs(d * (1 + 1e-14))) / Math.log(10)) + 1;
   }
-    
-  private int decimalDigits ( double d, boolean expo ) {
-    if( d == 0.0 ) return 0;
-    d = Math.abs( d );
-    int e = intDigits( d );
-    if( expo ) {
-      d /= Math.pow(10, e-1);
+
+  private int decimalDigits(double d, boolean expo) {
+    if (d == 0.0) {
+      return 0;
+    }
+    d = Math.abs(d);
+    int e = intDigits(d);
+    if (expo) {
+      d /= Math.pow(10, e - 1);
       e = 1;
     }
-    if( e >= digits ) return 0;
-    int iD = Math.max(1, e);  
+    if (e >= digits) {
+      return 0;
+    }
+    int iD = Math.max(1, e);
     int dD = digits - e;
-    if( !trailing && dD > 0 ) {  // to get rid of trailing zeros
-      FloatingPointFormat f = new 
-	FloatingPointFormat( iD + 1 + dD, dD, true);
-      String dString = f.format( d );
-      while( dD > 0 ) {
-	if( dString.charAt(iD+1+dD-1) == '0' ) {
-	  dD--;
-	}
-	else break;
+    if (!trailing && dD > 0) { // to get rid of trailing zeros
+      FloatingPointFormat f = new FloatingPointFormat(iD + 1 + dD, dD, true);
+
+      String dString = f.nf.format(d);
+      while (dD > 0) {
+        if (dString.charAt(iD + 1 + dD - 1) == '0') {
+          dD--;
+        } else {
+          break;
+        }
       }
     }
     return dD;
   }
-    
-  public boolean  needExponentialFormat ( double d ) {
-    if( d == 0.0 ) return false;
-    int e = intDigits( d );
-    if( e > digits + 5 || e < -3 ) return true;
-    else return false;
+
+  public boolean needExponentialFormat(double d) {
+    if (d == 0.0) {
+      return false;
+    }
+    int e = intDigits(d);
+    if (e > digits + 5 || e < -3) {
+      return true;
+    } else {
+      return false;
+    }
   }
-    
-  public void grouping ( boolean grouping ) {
+
+  public void grouping(boolean grouping) {
     this.grouping = grouping;
   }
-    
-  private static void println ( Object obj ){
-    System.out.println( obj );
+
+  private static void println(Object obj) {
+    System.out.println(obj);
   }
 
-  private void setFormat ( ) {
+  private void setFormat() {
     int dot = 1;
-    if( decimalDigits == 0) dot = 0;
-    if( exp ) 
-      nf = new ExponentialFormat( 1 + expDecimalDigits, power, sign, 
-				  grouping || trailing );
-    else { 
+    if (decimalDigits == 0) {
+      dot = 0;
+    }
+    if (exp) {
+      nf =
+        new ExponentialFormat(1 + expDecimalDigits, power, sign, grouping
+          || trailing);
+    } else {
       int s = sign ? 1 : 0;
-      nf = new FloatingPointFormat( s +intDigits +dot +decimalDigits, 
-				    decimalDigits, grouping || trailing);
+      nf =
+        new FloatingPointFormat(s + intDigits + dot + decimalDigits,
+          decimalDigits, grouping || trailing);
     }
   }
-    
-  private void setFormat ( double d ) {
-    newFormat( d );
+
+  private void setFormat(double d) {
+    newFormat(d);
     setFormat();
   }
 
-  public StringBuffer format (double number, StringBuffer toAppendTo,
-			      FieldPosition pos) {
-    if( grouping ) {
-      if( nf == null ) {
-	setFormat();
+  @Override
+  public StringBuffer format(double number, StringBuffer toAppendTo,
+    FieldPosition pos) {
+    if (grouping) {
+      if (nf == null) {
+        setFormat();
       }
+    } else {
+      setFormat(number);
     }
-    else setFormat( number );
-	
-    return toAppendTo.append( nf.format(number) );
+
+    return toAppendTo.append(nf.format(number));
   }
 
-  public int width () {
-	
-    if( !trailing && !grouping ) 
-      throw new RuntimeException( "flexible width" );
-	
+  public int width() {
+
+    if (!trailing && !grouping) {
+      throw new RuntimeException("flexible width");
+    }
+
     return format(0.).length();
   }
-    
-  public StringBuffer formatString ( String str ) {
+
+  public StringBuffer formatString(String str) {
     int w = width();
-    int h = ( w - str.length() ) / 2;
+    int h = (w - str.length()) / 2;
     StringBuffer text = new StringBuffer();
-    for(int i = 0; i < h; i++ ){
-      text.append( ' ' );
+    for (int i = 0; i < h; i++) {
+      text.append(' ');
     }
-    text.append( str );
-    for(int i = 0; i < w - h - str.length(); i++ ){
-      text.append( ' ' );
+    text.append(str);
+    for (int i = 0; i < w - h - str.length(); i++) {
+      text.append(' ');
     }
     return text;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
     return RevisionUtils.extract("$Revision: 1.4 $");
   }
 }
-
-
diff --git a/src/main/java/weka/core/tokenizers/NGramTokenizer.java b/src/main/java/weka/core/tokenizers/NGramTokenizer.java
index b865994..486cfda 100644
--- a/src/main/java/weka/core/tokenizers/NGramTokenizer.java
+++ b/src/main/java/weka/core/tokenizers/NGramTokenizer.java
@@ -21,37 +21,43 @@
 
 package weka.core.tokenizers;
 
-import weka.core.Option;
-import weka.core.RevisionUtils;
-import weka.core.Utils;
-
 import java.util.Enumeration;
 import java.util.LinkedList;
 import java.util.Vector;
 
+import weka.core.Option;
+import weka.core.RevisionUtils;
+import weka.core.Utils;
+
 /**
- <!-- globalinfo-start -->
- * Splits a string into an n-gram with min and max grams.
+ * <!-- globalinfo-start --> Splits a string into an n-gram with min and max
+ * grams.
  * <p/>
- <!-- globalinfo-end -->
+ * <!-- globalinfo-end -->
  * 
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- options-start --> Valid options are:
+ * <p/>
  * 
- * <pre> -delimiters <value>
+ * <pre>
+ * -delimiters <value>
  *  The delimiters to use
- *  (default ' \r\n\t.,;:'"()?!').</pre>
+ *  (default ' \r\n\t.,;:'"()?!').
+ * </pre>
  * 
- * <pre> -max <int>
- *  The max size of the Ngram (default = 3).</pre>
+ * <pre>
+ * -max <int>
+ *  The max size of the Ngram (default = 3).
+ * </pre>
  * 
- * <pre> -min <int>
- *  The min size of the Ngram (default = 1).</pre>
+ * <pre>
+ * -min <int>
+ *  The min size of the Ngram (default = 1).
+ * </pre>
  * 
- <!-- options-end -->
- *
- * @author  Sebastian Germesin (sebastian.germesin at dfki.de)
- * @author  FracPete (fracpete at waikato dot ac dot nz)
+ * <!-- options-end -->
+ * 
+ * @author Sebastian Germesin (sebastian.germesin at dfki.de)
+ * @author FracPete (fracpete at waikato dot ac dot nz)
  * @version $Revision: 1.4 $
  */
 public class NGramTokenizer
@@ -62,75 +68,79 @@ public class NGramTokenizer
 
   /** the maximum number of N */
   protected int m_NMax = 3;
-  
+
   /** the minimum number of N */
   protected int m_NMin = 1;
-  
+
   /** the current length of the N-grams */
   protected int m_N;
-  
+
   /** the number of strings available */
   protected int m_MaxPosition;
-  
+
   /** the current position for returning elements */
   protected int m_CurrentPosition;
-  
+
   /** all the available grams */
   protected String[] m_SplitString;
-  
+
   /**
    * Returns a string describing the stemmer
    * 
-   * @return 		a description suitable for displaying in the 
-   * 			explorer/experimenter gui
+   * @return a description suitable for displaying in the explorer/experimenter
+   *         gui
    */
+  @Override
   public String globalInfo() {
     return "Splits a string into an n-gram with min and max grams.";
   }
-  
+
   /**
    * Returns an enumeration of all the available options..
-   *
-   * @return 		an enumeration of all available options.
+   * 
+   * @return an enumeration of all available options.
    */
+  @Override
   public Enumeration listOptions() {
-    Vector	result;
+    Vector result;
     Enumeration enm;
-    
+
     result = new Vector();
-    
+
     enm = super.listOptions();
-    while (enm.hasMoreElements())
+    while (enm.hasMoreElements()) {
       result.addElement(enm.nextElement());
+    }
 
     result.addElement(new Option(
-	"\tThe max size of the Ngram (default = 3).",
-	"max", 1, "-max <int>"));
+      "\tThe max size of the Ngram (default = 3).",
+      "max", 1, "-max <int>"));
 
     result.addElement(new Option(
-	"\tThe min size of the Ngram (default = 1).",
-	"min", 1, "-min <int>"));
-    
+      "\tThe min size of the Ngram (default = 1).",
+      "min", 1, "-min <int>"));
+
     return result.elements();
   }
-  
+
   /**
    * Gets the current option settings for the OptionHandler.
-   *
-   * @return 		the list of current option settings as an array of 
-   * 			strings
+   * 
+   * @return the list of current option settings as an array of strings
    */
+  @Override
   public String[] getOptions() {
-    Vector<String>	result;
-    String[]		options;
-    int			i;
-    
+    Vector<String> result;
+    String[] options;
+    int i;
+
     result = new Vector<String>();
-    
+
     options = super.getOptions();
-    for (i = 0; i < options.length; i++)
+    for (i = 0; i < options.length; i++) {
       result.add(options[i]);
-    
+    }
+
     result.add("-max");
     result.add("" + getNGramMaxSize());
 
@@ -141,48 +151,58 @@ public class NGramTokenizer
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -delimiters <value>
+   * <pre>
+   * -delimiters <value>
    *  The delimiters to use
-   *  (default ' \r\n\t.,;:'"()?!').</pre>
+   *  (default ' \r\n\t.,;:'"()?!').
+   * </pre>
    * 
-   * <pre> -max <int>
-   *  The max size of the Ngram (default = 3).</pre>
+   * <pre>
+   * -max <int>
+   *  The max size of the Ngram (default = 3).
+   * </pre>
    * 
-   * <pre> -min <int>
-   *  The min size of the Ngram (default = 1).</pre>
+   * <pre>
+   * -min <int>
+   *  The min size of the Ngram (default = 1).
+   * </pre>
    * 
-   <!-- options-end -->
-   *
-   * @param options 	the list of options as an array of strings
-   * @throws Exception 	if an option is not supported
+   * <!-- options-end -->
+   * 
+   * @param options the list of options as an array of strings
+   * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    String	value;
-    
+    String value;
+
     super.setOptions(options);
 
     value = Utils.getOption("max", options);
-    if (value.length() != 0)
+    if (value.length() != 0) {
       setNGramMaxSize(Integer.parseInt(value));
-    else
+    } else {
       setNGramMaxSize(3);
+    }
 
     value = Utils.getOption("min", options);
-    if (value.length() != 0)
+    if (value.length() != 0) {
       setNGramMinSize(Integer.parseInt(value));
-    else
+    } else {
       setNGramMinSize(1);
+    }
   }
-  
+
   /**
    * Gets the max N of the NGram.
    * 
-   * @return 		the size (N) of the NGram.
+   * @return the size (N) of the NGram.
    */
   public int getNGramMaxSize() {
     return m_NMax;
@@ -191,20 +211,21 @@ public class NGramTokenizer
   /**
    * Sets the max size of the Ngram.
    * 
-   * @param value 	the size of the NGram.
+   * @param value the size of the NGram.
    */
   public void setNGramMaxSize(int value) {
-    if (value < 1)
+    if (value < 1) {
       m_NMax = 1;
-    else
+    } else {
       m_NMax = value;
+    }
   }
 
   /**
    * Returns the tip text for this property.
-   *
-   * @return 		tip text for this property suitable for
-   * 			displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String NGramMaxSizeTipText() {
     return "The max N of the NGram.";
@@ -213,19 +234,20 @@ public class NGramTokenizer
   /**
    * Sets the min size of the Ngram.
    * 
-   * @param value 	the size of the NGram.
+   * @param value the size of the NGram.
    */
   public void setNGramMinSize(int value) {
-    if (value < 1)
+    if (value < 1) {
       m_NMin = 1;
-    else
+    } else {
       m_NMin = value;
+    }
   }
 
   /**
    * Gets the min N of the NGram.
    * 
-   * @return 		the size (N) of the NGram.
+   * @return the size (N) of the NGram.
    */
   public int getNGramMinSize() {
     return m_NMin;
@@ -233,9 +255,9 @@ public class NGramTokenizer
 
   /**
    * Returns the tip text for this property.
-   *
-   * @return 		tip text for this property suitable for
-   * 			displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String NGramMinSizeTipText() {
     return "The min N of the NGram.";
@@ -244,27 +266,34 @@ public class NGramTokenizer
   /**
    * returns true if there's more elements available
    * 
-   * @return		true if there are more elements available
+   * @return true if there are more elements available
    */
+  @Override
   public boolean hasMoreElements() {
-    return (m_CurrentPosition < m_MaxPosition && 
-	m_N - 1 + m_CurrentPosition < m_MaxPosition && 
-	m_N >= m_NMin);
+    // return (m_CurrentPosition < m_MaxPosition &&
+    // m_N - 1 + m_CurrentPosition < m_MaxPosition &&
+    // m_N >= m_NMin);
+    return (m_N >= m_NMin);
   }
-  
+
   /**
    * Returns N-grams and also (N-1)-grams and .... and 1-grams.
    * 
-   * @return		the next element
+   * @return the next element
    */
+  @Override
   public Object nextElement() {
     String retValue = "";
-    
-    for (int i = 0; i < m_N && i + m_CurrentPosition < m_MaxPosition; i++)
+
+    // for (int i = 0; i < m_N && i + m_CurrentPosition < m_MaxPosition; i++)
+    // retValue += " " + m_SplitString[m_CurrentPosition + i];
+    //
+    for (int i = 0; i < m_N; i++) {
       retValue += " " + m_SplitString[m_CurrentPosition + i];
-    
+    }
+
     m_CurrentPosition++;
-    
+
     if (m_CurrentPosition + m_N - 1 == m_MaxPosition) {
       m_CurrentPosition = 0;
       m_N--;
@@ -273,9 +302,9 @@ public class NGramTokenizer
     return retValue.trim();
   }
 
-  /** 
-   * filters out empty strings in m_SplitString and
-   * replaces m_SplitString with the cleaned version.
+  /**
+   * filters out empty strings in m_SplitString and replaces m_SplitString with
+   * the cleaned version.
    * 
    * @see #m_SplitString
    */
@@ -284,49 +313,56 @@ public class NGramTokenizer
     LinkedList<String> clean = new LinkedList<String>();
 
     for (int i = 0; i < m_SplitString.length; i++) {
-      if (!m_SplitString[i].equals(""))
-	clean.add(m_SplitString[i]);
+      if (!m_SplitString[i].equals("")) {
+        clean.add(m_SplitString[i]);
+      }
     }
 
     newSplit = new String[clean.size()];
-    for (int i = 0; i < clean.size(); i++) 
+    for (int i = 0; i < clean.size(); i++) {
       newSplit[i] = clean.get(i);
+    }
 
     m_SplitString = newSplit;
   }
-  
+
   /**
    * Sets the string to tokenize. Tokenization happens immediately.
    * 
-   * @param s		the string to tokenize
+   * @param s the string to tokenize
    */
+  @Override
   public void tokenize(String s) {
-    m_N           = m_NMax;
+    m_N = m_NMax;
     m_SplitString = s.split("[" + getDelimiters() + "]");
-    
+
     filterOutEmptyStrings();
 
     m_CurrentPosition = 0;
-    m_MaxPosition     = m_SplitString.length;
+    m_MaxPosition = m_SplitString.length;
+
+    if (m_SplitString.length < m_NMax) {
+      m_N = m_SplitString.length;
+    }
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
     return RevisionUtils.extract("$Revision: 1.4 $");
   }
 
   /**
-   * Runs the tokenizer with the given options and strings to tokenize.
-   * The tokens are printed to stdout.
+   * Runs the tokenizer with the given options and strings to tokenize. The
+   * tokens are printed to stdout.
    * 
-   * @param args	the commandline options and strings to tokenize
+   * @param args the commandline options and strings to tokenize
    */
   public static void main(String[] args) {
     runTokenizer(new NGramTokenizer(), args);
   }
 }
-
diff --git a/src/main/java/weka/core/version.txt b/src/main/java/weka/core/version.txt
index c788d3a..a3e2011 100644
--- a/src/main/java/weka/core/version.txt
+++ b/src/main/java/weka/core/version.txt
@@ -1 +1 @@
-3-6-11
\ No newline at end of file
+3-6-12
\ No newline at end of file
diff --git a/src/main/java/weka/datagenerators/clusterers/SubspaceClusterDefinition.java b/src/main/java/weka/datagenerators/clusterers/SubspaceClusterDefinition.java
index 0306ebb..7cf329e 100644
--- a/src/main/java/weka/datagenerators/clusterers/SubspaceClusterDefinition.java
+++ b/src/main/java/weka/datagenerators/clusterers/SubspaceClusterDefinition.java
@@ -22,6 +22,11 @@
 
 package weka.datagenerators.clusterers;
 
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
 import weka.core.Option;
 import weka.core.Range;
 import weka.core.RevisionUtils;
@@ -30,52 +35,59 @@ import weka.core.Utils;
 import weka.datagenerators.ClusterDefinition;
 import weka.datagenerators.ClusterGenerator;
 
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * A single cluster for the SubspaceCluster datagenerator
+ * <!-- globalinfo-start --> A single cluster for the SubspaceCluster
+ * datagenerator
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -A <range>
- *  Generates randomly distributed instances in the cluster.</pre>
+ * <pre>
+ * -A <range>
+ *  Generates randomly distributed instances in the cluster.
+ * </pre>
  * 
- * <pre> -U <range>
- *  Generates uniformly distributed instances in the cluster.</pre>
+ * <pre>
+ * -U <range>
+ *  Generates uniformly distributed instances in the cluster.
+ * </pre>
  * 
- * <pre> -G <range>
- *  Generates gaussian distributed instances in the cluster.</pre>
+ * <pre>
+ * -G <range>
+ *  Generates gaussian distributed instances in the cluster.
+ * </pre>
  * 
- * <pre> -D <num>,<num>
+ * <pre>
+ * -D <num>,<num>
  *  The attribute min/max (-A and -U) or mean/stddev (-G) for
- *  the cluster.</pre>
+ *  the cluster.
+ * </pre>
  * 
- * <pre> -N <num>..<num>
- *  The range of number of instances per cluster (default 1..50).</pre>
+ * <pre>
+ * -N <num>..<num>
+ *  The range of number of instances per cluster (default 1..50).
+ * </pre>
  * 
- * <pre> -I
- *  Uses integer instead of continuous values (default continuous).</pre>
+ * <pre>
+ * -I
+ *  Uses integer instead of continuous values (default continuous).
+ * </pre>
  * 
- <!-- options-end -->
- *
- * @author  Gabi Schmidberger (gabi at cs.waikato.ac.nz)
- * @author  FracPete (fracpete at waikato dot ac dot nz)
+ * <!-- options-end -->
+ * 
+ * @author Gabi Schmidberger (gabi at cs.waikato.ac.nz)
+ * @author FracPete (fracpete at waikato dot ac dot nz)
  * @version $Revision: 1.5 $
  * @see SubspaceCluster
  */
-public class SubspaceClusterDefinition 
+public class SubspaceClusterDefinition
   extends ClusterDefinition {
 
   /** for serialization */
   static final long serialVersionUID = 3135678125044007231L;
-  
+
   /** cluster type */
   protected int m_clustertype;
 
@@ -111,7 +123,7 @@ public class SubspaceClusterDefinition
 
   /** mean ; only used if gaussian */
   protected double[] m_meanValue;
-  
+
   /** standarddev; only used if gaussian */
   protected double[] m_stddevValue;
 
@@ -124,8 +136,8 @@ public class SubspaceClusterDefinition
 
   /**
    * initializes the cluster with default values
-   *
-   * @param parent    the datagenerator this cluster belongs to
+   * 
+   * @param parent the datagenerator this cluster belongs to
    */
   public SubspaceClusterDefinition(ClusterGenerator parent) {
     super(parent);
@@ -136,6 +148,7 @@ public class SubspaceClusterDefinition
    * 
    * @throws Exception if setting of defaults fails
    */
+  @Override
   protected void setDefaults() throws Exception {
     setClusterType(defaultClusterType());
     setClusterSubType(defaultClusterSubType());
@@ -146,87 +159,103 @@ public class SubspaceClusterDefinition
     setValuesList(defaultValuesList());
   }
 
-  
   /**
    * Returns a string describing this data generator.
-   *
-   * @return a description of the data generator suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the data generator suitable for displaying in the
+   *         explorer/experimenter gui
    */
+  @Override
   public String globalInfo() {
     return "A single cluster for the SubspaceCluster datagenerator";
   }
+
   /**
    * Returns an enumeration describing the available options.
-   *
+   * 
    * @return an enumeration of all the available options
    */
+  @Override
   public Enumeration listOptions() {
     Vector result = new Vector();
 
     result.addElement(new Option(
-          "\tGenerates randomly distributed instances in the cluster.",
-          "A", 1, "-A <range>"));
+      "\tGenerates randomly distributed instances in the cluster.",
+      "A", 1, "-A <range>"));
 
     result.addElement(new Option(
-          "\tGenerates uniformly distributed instances in the cluster.",
-          "U", 1, "-U <range>"));
+      "\tGenerates uniformly distributed instances in the cluster.",
+      "U", 1, "-U <range>"));
 
     result.addElement(new Option(
-          "\tGenerates gaussian distributed instances in the cluster.",
-          "G", 1, "-G <range>"));
+      "\tGenerates gaussian distributed instances in the cluster.",
+      "G", 1, "-G <range>"));
 
     result.addElement(new Option(
-          "\tThe attribute min/max (-A and -U) or mean/stddev (-G) for\n"
-          + "\tthe cluster.",
-          "D", 1, "-D <num>,<num>"));
+      "\tThe attribute min/max (-A and -U) or mean/stddev (-G) for\n"
+        + "\tthe cluster.",
+      "D", 1, "-D <num>,<num>"));
 
     result.addElement(new Option(
-          "\tThe range of number of instances per cluster (default "
-          + defaultMinInstNum() + ".." + defaultMaxInstNum() + ").",
-          "N", 1, "-N <num>..<num>"));
+      "\tThe range of number of instances per cluster (default "
+        + defaultMinInstNum() + ".." + defaultMaxInstNum() + ").",
+      "N", 1, "-N <num>..<num>"));
 
     result.addElement(new Option(
-          "\tUses integer instead of continuous values (default continuous).",
-          "I", 0, "-I"));
+      "\tUses integer instead of continuous values (default continuous).",
+      "I", 0, "-I"));
 
     return result.elements();
   }
 
   /**
-   * Parses a list of options for this object. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a list of options for this object.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -A <range>
-   *  Generates randomly distributed instances in the cluster.</pre>
+   * <pre>
+   * -A <range>
+   *  Generates randomly distributed instances in the cluster.
+   * </pre>
    * 
-   * <pre> -U <range>
-   *  Generates uniformly distributed instances in the cluster.</pre>
+   * <pre>
+   * -U <range>
+   *  Generates uniformly distributed instances in the cluster.
+   * </pre>
    * 
-   * <pre> -G <range>
-   *  Generates gaussian distributed instances in the cluster.</pre>
+   * <pre>
+   * -G <range>
+   *  Generates gaussian distributed instances in the cluster.
+   * </pre>
    * 
-   * <pre> -D <num>,<num>
+   * <pre>
+   * -D <num>,<num>
    *  The attribute min/max (-A and -U) or mean/stddev (-G) for
-   *  the cluster.</pre>
+   *  the cluster.
+   * </pre>
    * 
-   * <pre> -N <num>..<num>
-   *  The range of number of instances per cluster (default 1..50).</pre>
+   * <pre>
+   * -N <num>..<num>
+   *  The range of number of instances per cluster (default 1..50).
+   * </pre>
    * 
-   * <pre> -I
-   *  Uses integer instead of continuous values (default continuous).</pre>
+   * <pre>
+   * -I
+   *  Uses integer instead of continuous values (default continuous).
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    String        tmpStr;
-    String        fromToStr;
-    int           typeCount;
+    String tmpStr;
+    String fromToStr;
+    int typeCount;
 
     typeCount = 0;
     fromToStr = "";
@@ -234,104 +263,120 @@ public class SubspaceClusterDefinition
     tmpStr = Utils.getOption('A', options);
     if (tmpStr.length() != 0) {
       fromToStr = tmpStr;
-      setClusterType(
-          new SelectedTag(
-            SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE));
+      setClusterType(new SelectedTag(
+        SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE));
       typeCount++;
     }
 
     tmpStr = Utils.getOption('U', options);
     if (tmpStr.length() != 0) {
       fromToStr = tmpStr;
-      setClusterType(
-          new SelectedTag(
-            SubspaceCluster.TOTAL_UNIFORM, SubspaceCluster.TAGS_CLUSTERTYPE));
+      setClusterType(new SelectedTag(
+        SubspaceCluster.TOTAL_UNIFORM, SubspaceCluster.TAGS_CLUSTERTYPE));
       typeCount++;
     }
 
     tmpStr = Utils.getOption('G', options);
     if (tmpStr.length() != 0) {
       fromToStr = tmpStr;
-      setClusterType(
-          new SelectedTag(
-            SubspaceCluster.GAUSSIAN, SubspaceCluster.TAGS_CLUSTERTYPE));
+      setClusterType(new SelectedTag(
+        SubspaceCluster.GAUSSIAN, SubspaceCluster.TAGS_CLUSTERTYPE));
       typeCount++;
     }
 
     // default is uniform/random
-    if (typeCount == 0)
-      setClusterType(
-          new SelectedTag(
-            SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE));
-    else if (typeCount > 1)
+    if (typeCount == 0) {
+      setClusterType(new SelectedTag(
+        SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE));
+    } else if (typeCount > 1) {
       throw new Exception("Only one cluster type can be specified!");
+    }
+
+    if (getParent() != null) {
+      setAttrIndexRange(fromToStr);
+    }
 
-    setAttrIndexRange(fromToStr);
-    
     tmpStr = Utils.getOption('D', options);
     if (isGaussian()) {
-      if (tmpStr.length() != 0)
+      if (tmpStr.length() != 0) {
         setMeanStddev(tmpStr);
-      else
+      } else {
         setMeanStddev(defaultMeanStddev());
+      }
     }
     else {
-      if (tmpStr.length() != 0)
+      if (tmpStr.length() != 0) {
         setValuesList(tmpStr);
-      else
+      } else {
+        m_numClusterAttributes = 1;
         setValuesList(defaultValuesList());
+      }
     }
 
     tmpStr = Utils.getOption('N', options);
-    if (tmpStr.length() != 0)
+    if (tmpStr.length() != 0) {
       setInstNums(tmpStr);
-    else
+    } else {
       setInstNums(defaultMinInstNum() + ".." + defaultMaxInstNum());
+    }
 
-    if (Utils.getFlag('I', options))
-      setClusterSubType(
-          new SelectedTag(
-            SubspaceCluster.INTEGER, SubspaceCluster.TAGS_CLUSTERSUBTYPE));
-    else
-      setClusterSubType(
-          new SelectedTag(
-            SubspaceCluster.CONTINUOUS, SubspaceCluster.TAGS_CLUSTERSUBTYPE));
+    if (Utils.getFlag('I', options)) {
+      setClusterSubType(new SelectedTag(
+        SubspaceCluster.INTEGER, SubspaceCluster.TAGS_CLUSTERSUBTYPE));
+    } else {
+      setClusterSubType(new SelectedTag(
+        SubspaceCluster.CONTINUOUS, SubspaceCluster.TAGS_CLUSTERSUBTYPE));
+    }
   }
 
   /**
    * Gets the current settings of the datagenerator BIRCHCluster.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
+  @Override
   public String[] getOptions() {
-    Vector        result;
+    Vector result;
 
-    result  = new Vector();
+    result = new Vector();
 
     if (isRandom()) {
-      result.add("-A");
-      result.add("" + getAttrIndexRange());
-      result.add("-D");
-      result.add("" + getValuesList());
+      if (getAttrIndexRange().length() > 0) {
+        result.add("-A");
+        result.add("" + getAttrIndexRange());
+      }
+      if (getValuesList().length() > 0) {
+        result.add("-D");
+        result.add("" + getValuesList());
+      }
     }
     else if (isUniform()) {
-      result.add("-U");
-      result.add("" + getAttrIndexRange());
-      result.add("-D");
-      result.add("" + getValuesList());
+      if (getAttrIndexRange().length() > 0) {
+        result.add("-U");
+        result.add("" + getAttrIndexRange());
+      }
+      if (getValuesList().length() > 0) {
+        result.add("-D");
+        result.add("" + getValuesList());
+      }
     }
     else if (isGaussian()) {
-      result.add("-G");
-      result.add("" + getAttrIndexRange());
-      result.add("-D");
-      result.add("" + getMeanStddev());
+      if (getAttrIndexRange().length() > 0) {
+        result.add("-G");
+        result.add("" + getAttrIndexRange());
+      }
+      if (getValuesList().length() > 0) {
+        result.add("-D");
+        result.add("" + getMeanStddev());
+      }
     }
 
-    result.add("-N"); 
+    result.add("-N");
     result.add("" + getInstNums());
 
-    if (m_clustersubtype == SubspaceCluster.INTEGER)
+    if (m_clustersubtype == SubspaceCluster.INTEGER) {
       result.add("-I");
+    }
 
     return (String[]) result.toArray(new String[result.size()]);
   }
@@ -348,13 +393,13 @@ public class SubspaceClusterDefinition
       if (m_attributes[i]) {
         if (isGaussian()) {
           text.append(" Attribute: " + i);
-          text.append(" Mean: "+ m_meanValue[j]);
-          text.append(" StdDev: "+m_stddevValue[j]+"\n%");
-        } 
+          text.append(" Mean: " + m_meanValue[j]);
+          text.append(" StdDev: " + m_stddevValue[j] + "\n%");
+        }
         else {
           text.append(" Attribute: " + i);
-          text.append(" Range: "+ m_minValue[j]);
-          text.append(" - "+m_maxValue[j]+"\n%");
+          text.append(" Range: " + m_minValue[j]);
+          text.append(" - " + m_maxValue[j] + "\n%");
         }
         j++;
       }
@@ -367,16 +412,18 @@ public class SubspaceClusterDefinition
    * 
    * @return the cluster features as string
    */
+  @Override
   public String toString() {
     StringBuffer text = new StringBuffer();
     text.append("attributes " + attributesToString() + "\n");
-    text.append("number of instances " + getInstNums()); 
+    text.append("number of instances " + getInstNums());
     return text.toString();
   }
 
   /**
    * sets the parent datagenerator this cluster belongs to
-   * @param parent      the parent datagenerator
+   * 
+   * @param parent the parent datagenerator
    */
   public void setParent(SubspaceCluster parent) {
     super.setParent(parent);
@@ -393,34 +440,35 @@ public class SubspaceClusterDefinition
   }
 
   /**
-   * Sets which attributes are used in the cluster
-   * attributes among the selection will be discretized.
-   *
-   * @param rangeList a string representing the list of attributes. Since
-   * the string will typically come from a user, attributes are indexed from
-   * 1. <br/>
-   * eg: first-3,5,6-last
+   * Sets which attributes are used in the cluster attributes among the
+   * selection will be discretized.
+   * 
+   * @param rangeList a string representing the list of attributes. Since the
+   *          string will typically come from a user, attributes are indexed
+   *          from 1. <br/>
+   *          eg: first-3,5,6-last
    */
   public void setAttrIndexRange(String rangeList) {
-    m_numClusterAttributes = 0; 
-    if (m_AttrIndexRange == null)
+    m_numClusterAttributes = 0;
+    if (m_AttrIndexRange == null) {
       m_AttrIndexRange = new Range();
+    }
     m_AttrIndexRange.setRanges(rangeList);
 
     if (getParent() != null) {
       m_AttrIndexRange.setUpper(getParent().getNumAttributes());
-      m_attributes = new boolean [getParent().getNumAttributes()];
+      m_attributes = new boolean[getParent().getNumAttributes()];
       for (int i = 0; i < m_attributes.length; i++) {
         if (m_AttrIndexRange.isInRange(i)) {
           m_numClusterAttributes++;
-          m_attributes[i] = true; 
-        } 
+          m_attributes[i] = true;
+        }
         else {
-          m_attributes[i] = false; 
+          m_attributes[i] = false;
         }
       }
 
-      //store translation from attr in cluster to attr in whole dataset
+      // store translation from attr in cluster to attr in whole dataset
       m_attrIndices = new int[m_numClusterAttributes];
       int clusterI = -1;
       for (int i = 0; i < m_attributes.length; i++) {
@@ -440,11 +488,12 @@ public class SubspaceClusterDefinition
   public String getAttrIndexRange() {
     return m_AttrIndexRange.getRanges();
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String attrIndexRangeTipText() {
     return "The attribute range(s).";
@@ -470,8 +519,8 @@ public class SubspaceClusterDefinition
     return m_stddevValue;
   }
 
-  public int getNumInstances () { 
-    return m_numInstances; 
+  public int getNumInstances() {
+    return m_numInstances;
   }
 
   /**
@@ -481,34 +530,36 @@ public class SubspaceClusterDefinition
    */
   protected SelectedTag defaultClusterType() {
     return new SelectedTag(
-        SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE);
+      SubspaceCluster.UNIFORM_RANDOM, SubspaceCluster.TAGS_CLUSTERTYPE);
   }
-  
+
   /**
    * Gets the cluster type.
-   *
+   * 
    * @return the cluster type
    * @see SubspaceCluster#TAGS_CLUSTERTYPE
    */
   public SelectedTag getClusterType() {
     return new SelectedTag(m_clustertype, SubspaceCluster.TAGS_CLUSTERTYPE);
   }
-  
+
   /**
    * Sets the cluster type.
-   *
+   * 
    * @param value the new cluster type.
    * @see SubspaceCluster#TAGS_CLUSTERTYPE
    */
   public void setClusterType(SelectedTag value) {
-    if (value.getTags() == SubspaceCluster.TAGS_CLUSTERTYPE)
+    if (value.getTags() == SubspaceCluster.TAGS_CLUSTERTYPE) {
       m_clustertype = value.getSelectedTag().getID();
+    }
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String clusterTypeTipText() {
     return "The type of cluster to use.";
@@ -521,41 +572,43 @@ public class SubspaceClusterDefinition
    */
   protected SelectedTag defaultClusterSubType() {
     return new SelectedTag(
-        SubspaceCluster.CONTINUOUS, SubspaceCluster.TAGS_CLUSTERSUBTYPE);
+      SubspaceCluster.CONTINUOUS, SubspaceCluster.TAGS_CLUSTERSUBTYPE);
   }
-  
+
   /**
    * Gets the cluster sub type.
-   *
+   * 
    * @return the cluster sub type
    * @see SubspaceCluster#TAGS_CLUSTERSUBTYPE
    */
   public SelectedTag getClusterSubType() {
     return new SelectedTag(
-                  m_clustersubtype, SubspaceCluster.TAGS_CLUSTERSUBTYPE);
+      m_clustersubtype, SubspaceCluster.TAGS_CLUSTERSUBTYPE);
   }
-  
+
   /**
    * Sets the cluster sub type.
-   *
+   * 
    * @param value the new cluster sub type.
    * @see SubspaceCluster#TAGS_CLUSTERSUBTYPE
    */
   public void setClusterSubType(SelectedTag value) {
-    if (value.getTags() == SubspaceCluster.TAGS_CLUSTERSUBTYPE)
+    if (value.getTags() == SubspaceCluster.TAGS_CLUSTERSUBTYPE) {
       m_clustersubtype = value.getSelectedTag().getID();
+    }
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String clusterSubTypeTipText() {
     return "The sub-type of cluster to use.";
   }
 
-  /** 
+  /**
    * checks, whether cluster type is random
    * 
    * @return true if cluster type is random
@@ -564,7 +617,7 @@ public class SubspaceClusterDefinition
     return (m_clustertype == SubspaceCluster.UNIFORM_RANDOM);
   }
 
-  /** 
+  /**
    * checks, whether cluster type is uniform
    * 
    * @return true if cluster type is uniform
@@ -573,7 +626,7 @@ public class SubspaceClusterDefinition
     return (m_clustertype == SubspaceCluster.TOTAL_UNIFORM);
   }
 
-  /** 
+  /**
    * checks, whether cluster type is gaussian
    * 
    * @return true if cluster type is gaussian
@@ -582,7 +635,7 @@ public class SubspaceClusterDefinition
     return (m_clustertype == SubspaceCluster.GAUSSIAN);
   }
 
-  /** 
+  /**
    * checks, whether cluster sub type is continuous
    * 
    * @return true if cluster sub type is continuous
@@ -591,7 +644,7 @@ public class SubspaceClusterDefinition
     return (m_clustertype == SubspaceCluster.CONTINUOUS);
   }
 
-  /** 
+  /**
    * checks, whether cluster sub type is integer
    * 
    * @return true if cluster sub type is integer
@@ -602,41 +655,43 @@ public class SubspaceClusterDefinition
 
   /**
    * Sets the upper and lower boundary for instances for this cluster.
-   *
-   * @param fromTo  the string containing the upper and lower boundary for
-   *                instances per cluster separated by ..
+   * 
+   * @param fromTo the string containing the upper and lower boundary for
+   *          instances per cluster separated by ..
    */
   protected void setInstNums(String fromTo) {
     int i = fromTo.indexOf("..");
-    if (i == -1) 
+    if (i == -1) {
       i = fromTo.length();
+    }
     String from = fromTo.substring(0, i);
     m_MinInstNum = Integer.parseInt(from);
     if (i < fromTo.length()) {
       String to = fromTo.substring(i + 2, fromTo.length());
       m_MaxInstNum = Integer.parseInt(to);
-    } 
+    }
     else {
       m_MaxInstNum = m_MinInstNum;
     }
   }
 
   /**
-   * Get a string with the  upper and lower boundary for the 
-   * number of instances for this cluster.
-   *
-   * @return the string containing the upper and lower boundary for
-   * instances per cluster separated by ..
+   * Get a string with the upper and lower boundary for the number of instances
+   * for this cluster.
+   * 
+   * @return the string containing the upper and lower boundary for instances
+   *         per cluster separated by ..
    */
   protected String getInstNums() {
-    String text = new String(""+m_MinInstNum+".."+m_MaxInstNum);
+    String text = new String("" + m_MinInstNum + ".." + m_MaxInstNum);
     return text;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   protected String instNumsTipText() {
     return "The lower and upper boundary for the number of instances in this cluster.";
@@ -653,27 +708,27 @@ public class SubspaceClusterDefinition
 
   /**
    * Gets the lower boundary for instances per cluster.
-   *
+   * 
    * @return the the lower boundary for instances per cluster
    */
-  public int getMinInstNum() { 
-    return m_MinInstNum; 
+  public int getMinInstNum() {
+    return m_MinInstNum;
   }
-  
+
   /**
    * Sets the lower boundary for instances per cluster.
-   *
+   * 
    * @param newMinInstNum new lower boundary for instances per cluster
    */
   public void setMinInstNum(int newMinInstNum) {
     m_MinInstNum = newMinInstNum;
   }
-  
+
   /**
    * Returns the tip text for this property
    * 
-   * @return tip text for this property suitable for
-   *         displaying in the explorer/experimenter gui
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String minInstNumTipText() {
     return "The lower boundary for instances per cluster.";
@@ -690,27 +745,27 @@ public class SubspaceClusterDefinition
 
   /**
    * Gets the upper boundary for instances per cluster.
-   *
+   * 
    * @return the upper boundary for instances per cluster
    */
-  public int getMaxInstNum() { 
-    return m_MaxInstNum; 
+  public int getMaxInstNum() {
+    return m_MaxInstNum;
   }
-  
+
   /**
    * Sets the upper boundary for instances per cluster.
-   *
+   * 
    * @param newMaxInstNum new upper boundary for instances per cluster
    */
   public void setMaxInstNum(int newMaxInstNum) {
     m_MaxInstNum = newMaxInstNum;
   }
-  
+
   /**
    * Returns the tip text for this property
    * 
-   * @return tip text for this property suitable for
-   *         displaying in the explorer/experimenter gui
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String maxInstNumTipText() {
     return "The upper boundary for instances per cluster.";
@@ -718,15 +773,16 @@ public class SubspaceClusterDefinition
 
   /**
    * Sets the real number of instances for this cluster.
-   *
-   * @param r random number generator 
+   * 
+   * @param r random number generator
    */
   public void setNumInstances(Random r) {
-    if (m_MaxInstNum > m_MinInstNum)
-      m_numInstances = (int)(r.nextDouble() 
-                       * (m_MaxInstNum - m_MinInstNum) + m_MinInstNum);
-    else
-      m_numInstances =  m_MinInstNum;
+    if (m_MaxInstNum > m_MinInstNum) {
+      m_numInstances = (int) (r.nextDouble()
+        * (m_MaxInstNum - m_MinInstNum) + m_MinInstNum);
+    } else {
+      m_numInstances = m_MinInstNum;
+    }
   }
 
   /**
@@ -740,44 +796,50 @@ public class SubspaceClusterDefinition
 
   /**
    * Sets the ranges for each attribute.
-   *
+   * 
    * @param fromToList the string containing the upper and lower boundary for
-   * instances per cluster separated by ..
+   *          instances per cluster separated by ..
    * @throws Exception if values are not correct in number or value
    */
   public void setValuesList(String fromToList) throws Exception {
-    m_minValue = new double [m_numClusterAttributes];
-    m_maxValue = new double [m_numClusterAttributes];
+    m_minValue = new double[m_numClusterAttributes];
+    m_maxValue = new double[m_numClusterAttributes];
     setValuesList(fromToList, m_minValue, m_maxValue, "D");
     SubspaceCluster parent = (SubspaceCluster) getParent();
 
     for (int i = 0; i < m_numClusterAttributes; i++) {
-      if (m_minValue[i] > m_maxValue[i])
+      if (m_minValue[i] > m_maxValue[i]) {
         throw new Exception("Min must be smaller than max.");
+      }
 
       if (getParent() != null) {
         // boolean values are only 0.0 and 1.0
         if (parent.isBoolean(m_attrIndices[i])) {
           parent.getNumValues()[m_attrIndices[i]] = 2;
           if (((m_minValue[i] != 0.0) && (m_minValue[i] != 1.0)) ||
-              ((m_maxValue[i] != 0.0) && (m_maxValue[i] != 1.0)))
+            ((m_maxValue[i] != 0.0) && (m_maxValue[i] != 1.0))) {
             throw new Exception("Ranges for boolean must be 0 or 1 only.");
+          }
         }
 
         if (parent.isNominal(m_attrIndices[i])) {
           // nominal values: attributes range might have to be enlarged
           double rest = m_minValue[i] - Math.rint(m_minValue[i]);
-          if (rest != 0.0) 
-            throw new Exception(" Ranges for nominal must be integer"); 
+          if (rest != 0.0) {
+            throw new Exception(" Ranges for nominal must be integer");
+          }
           rest = m_maxValue[i] - Math.rint(m_maxValue[i]);
-          if (rest != 0.0) 
-            throw new Exception("Ranges for nominal must be integer"); 
-          if (m_minValue[i] < 0.0) 
-            throw new Exception("Range for nominal must start with number 0.0 or higher");
+          if (rest != 0.0) {
+            throw new Exception("Ranges for nominal must be integer");
+          }
+          if (m_minValue[i] < 0.0) {
+            throw new Exception(
+              "Range for nominal must start with number 0.0 or higher");
+          }
           if (m_maxValue[i] + 1 > parent.getNumValues()[m_attrIndices[i]]) {
             // add new values to attribute
             // (actual format is not yet defined)
-            parent.getNumValues()[m_attrIndices[i]] = (int)m_maxValue[i] + 1;
+            parent.getNumValues()[m_attrIndices[i]] = (int) m_maxValue[i] + 1;
           }
         }
       }
@@ -788,26 +850,28 @@ public class SubspaceClusterDefinition
    * returns the range for each attribute as string
    */
   public String getValuesList() {
-    String        result;
-    int           i;
+    String result;
+    int i;
 
     result = "";
 
     if (m_minValue != null) {
       for (i = 0; i < m_minValue.length; i++) {
-        if (i > 0)
+        if (i > 0) {
           result += ",";
+        }
         result += "" + m_minValue[i] + "," + m_maxValue[i];
       }
     }
 
     return result;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String valuesListTipText() {
     return "The range for each each attribute as string.";
@@ -822,14 +886,14 @@ public class SubspaceClusterDefinition
 
   /**
    * Sets mean and standarddeviation.
-   *
+   * 
    * @param meanstddev the string containing the upper and lower boundary for
-   * instances per cluster separated by ..
+   *          instances per cluster separated by ..
    * @throws Exception if values are not correct in number or value
    */
   public void setMeanStddev(String meanstddev) throws Exception {
-    m_meanValue   = new double [m_numClusterAttributes];
-    m_stddevValue = new double [m_numClusterAttributes];
+    m_meanValue = new double[m_numClusterAttributes];
+    m_stddevValue = new double[m_numClusterAttributes];
     setValuesList(meanstddev, m_meanValue, m_stddevValue, "D");
   }
 
@@ -837,26 +901,28 @@ public class SubspaceClusterDefinition
    * returns the current mean/stddev setup
    */
   public String getMeanStddev() {
-    String        result;
-    int           i;
+    String result;
+    int i;
 
     result = "";
 
     if (m_meanValue != null) {
       for (i = 0; i < m_meanValue.length; i++) {
-        if (i > 0)
+        if (i > 0) {
           result += ",";
+        }
         result += "" + m_meanValue[i] + "," + m_stddevValue[i];
       }
     }
 
     return result;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String meanStddevTipText() {
     return "The mean and stddev, in case of gaussian.";
@@ -864,38 +930,40 @@ public class SubspaceClusterDefinition
 
   /**
    * Sets the ranges for each attribute.
-   *
+   * 
    * @param fromToList the string containing the upper and lower boundary for
-   * instances per cluster separated by ..
+   *          instances per cluster separated by ..
    * @param first the "from's"
    * @param second the "to's"
    * @param optionLetter the option, from which the list came
    * @throws Exception if values are not correct in number or value
    */
-  public void setValuesList(String fromToList, double[] first, double[] second, 
-      String optionLetter) throws Exception {
+  public void setValuesList(String fromToList, double[] first, double[] second,
+    String optionLetter) throws Exception {
+
+    StringTokenizer tok;
+    int index;
 
-    StringTokenizer     tok;
-    int                 index;
-    
     tok = new StringTokenizer(fromToList, ",");
-    if (tok.countTokens() != first.length + second.length)
+    if (tok.countTokens() != first.length + second.length) {
       throw new Exception(
-          "Wrong number of values for option '-" + optionLetter + "'.");
+        "Wrong number of values for option '-" + optionLetter + "'.");
+    }
 
     index = 0;
     while (tok.hasMoreTokens()) {
-      first[index]  = Double.parseDouble(tok.nextToken());
+      first[index] = Double.parseDouble(tok.nextToken());
       second[index] = Double.parseDouble(tok.nextToken());
       index++;
     }
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
     return RevisionUtils.extract("$Revision: 1.5 $");
   }
diff --git a/src/main/java/weka/experiment/AveragingResultProducer.java b/src/main/java/weka/experiment/AveragingResultProducer.java
index ee5f49b..cd3f020 100644
--- a/src/main/java/weka/experiment/AveragingResultProducer.java
+++ b/src/main/java/weka/experiment/AveragingResultProducer.java
@@ -20,9 +20,12 @@
  *
  */
 
-
 package weka.experiment;
 
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
 import weka.core.AdditionalMeasureProducer;
 import weka.core.FastVector;
 import weka.core.Instances;
@@ -32,101 +35,125 @@ import weka.core.RevisionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
 
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * Takes the results from a ResultProducer and submits the average to the result listener. Normally used with a CrossValidationResultProducer to perform n x m fold cross validation. For non-numeric result fields, the first value is used.
+ * <!-- globalinfo-start --> Takes the results from a ResultProducer and submits
+ * the average to the result listener. Normally used with a
+ * CrossValidationResultProducer to perform n x m fold cross validation. For
+ * non-numeric result fields, the first value is used.
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -F <field name>
+ * <pre>
+ * -F <field name>
  *  The name of the field to average over.
- *  (default "Fold")</pre>
+ *  (default "Fold")
+ * </pre>
  * 
- * <pre> -X <num results>
+ * <pre>
+ * -X <num results>
  *  The number of results expected per average.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -S
+ * <pre>
+ * -S
  *  Calculate standard deviations.
- *  (default only averages)</pre>
+ *  (default only averages)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a ResultProducer.
- *  eg: weka.experiment.CrossValidationResultProducer</pre>
+ *  eg: weka.experiment.CrossValidationResultProducer
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to result producer weka.experiment.CrossValidationResultProducer:
  * </pre>
  * 
- * <pre> -X <number of folds>
+ * <pre>
+ * -X <number of folds>
  *  The number of folds to use for the cross-validation.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -D
- * Save raw split evaluator output.</pre>
+ * <pre>
+ * -D
+ * Save raw split evaluator output.
+ * </pre>
  * 
- * <pre> -O <file/directory name/path>
+ * <pre>
+ * -O <file/directory name/path>
  *  The filename where raw output will be stored.
  *  If a directory name is specified then then individual
  *  outputs will be gzipped, otherwise all output will be
- *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+ *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a SplitEvaluator.
- *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+ *  eg: weka.experiment.ClassifierSplitEvaluator
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
  * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * All options after -- will be passed to the result producer.
  * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 6419 $
+ * @version $Revision: 11198 $
  */
-public class AveragingResultProducer 
+public class AveragingResultProducer
   implements ResultListener, ResultProducer, OptionHandler,
-	     AdditionalMeasureProducer, RevisionHandler {
+  AdditionalMeasureProducer, RevisionHandler {
 
   /** for serialization */
   static final long serialVersionUID = 2551284958501991352L;
-  
+
   /** The dataset of interest */
   protected Instances m_Instances;
 
@@ -134,21 +161,21 @@ public class AveragingResultProducer
   protected ResultListener m_ResultListener = new CSVResultListener();
 
   /** The ResultProducer used to generate results */
-  protected ResultProducer m_ResultProducer
-    = new CrossValidationResultProducer();
+  protected ResultProducer m_ResultProducer =
+    new CrossValidationResultProducer();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
-  
+  protected String[] m_AdditionalMeasures = null;
+
   /** The number of results expected to average over for each run */
   protected int m_ExpectedResultsPerAverage = 10;
 
   /** True if standard deviation fields should be produced */
   protected boolean m_CalculateStdDevs;
-    
+
   /**
-   * The name of the field that will contain the number of results
-   * averaged over.
+   * The name of the field that will contain the number of results averaged
+   * over.
    */
   protected String m_CountFieldName = "Num_" + CrossValidationResultProducer
     .FOLD_FIELD_NAME;
@@ -162,27 +189,28 @@ public class AveragingResultProducer
 
   /** Collects the keys from a single run */
   protected FastVector m_Keys = new FastVector();
-  
+
   /** Collects the results from a single run */
   protected FastVector m_Results = new FastVector();
 
   /**
    * Returns a string describing this result producer
-   * @return a description of the result producer suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the result producer suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "Takes the results from a ResultProducer "
-      +"and submits the average to the result listener. Normally used with "
-      +"a CrossValidationResultProducer to perform n x m fold cross "
-      +"validation. For non-numeric result fields, the first value is used.";
+      + "and submits the average to the result listener. Normally used with "
+      + "a CrossValidationResultProducer to perform n x m fold cross "
+      + "validation. For non-numeric result fields, the first value is used.";
   }
 
   /**
-   * Scans through the key field names of the result producer to find
-   * the index of the key field to average over. Sets the value of
-   * m_KeyIndex to the index, or -1 if no matching key field was found.
-   *
+   * Scans through the key field names of the result producer to find the index
+   * of the key field to average over. Sets the value of m_KeyIndex to the
+   * index, or -1 if no matching key field was found.
+   * 
    * @return the index of the key field to average over
    */
   protected int findKeyIndex() {
@@ -190,13 +218,13 @@ public class AveragingResultProducer
     m_KeyIndex = -1;
     try {
       if (m_ResultProducer != null) {
-	String [] keyNames = m_ResultProducer.getKeyNames();
-	for (int i = 0; i < keyNames.length; i++) {
-	  if (keyNames[i].equals(m_KeyFieldName)) {
-	    m_KeyIndex = i;
-	    break;
-	  }
-	}
+        String[] keyNames = m_ResultProducer.getKeyNames();
+        for (int i = 0; i < keyNames.length; i++) {
+          if (keyNames[i].equals(m_KeyFieldName)) {
+            m_KeyIndex = i;
+            break;
+          }
+        }
       }
     } catch (Exception ex) {
     }
@@ -204,31 +232,31 @@ public class AveragingResultProducer
   }
 
   /**
-   * Determines if there are any constraints (imposed by the
-   * destination) on the result columns to be produced by
-   * resultProducers. Null should be returned if there are NO
-   * constraints, otherwise a list of column names should be
+   * Determines if there are any constraints (imposed by the destination) on the
+   * result columns to be produced by resultProducers. Null should be returned
+   * if there are NO constraints, otherwise a list of column names should be
    * returned as an array of Strings.
+   * 
    * @param rp the ResultProducer to which the constraints will apply
-   * @return an array of column names to which resutltProducer's
-   * results will be restricted.
+   * @return an array of column names to which resutltProducer's results will be
+   *         restricted.
    * @throws Exception if constraints can't be determined
    */
-  public String [] determineColumnConstraints(ResultProducer rp) 
+  @Override
+  public String[] determineColumnConstraints(ResultProducer rp)
     throws Exception {
     return null;
   }
 
   /**
-   * Simulates a run to collect the keys the sub-resultproducer could
-   * generate. Does some checking on the keys and determines the 
-   * template key.
-   *
+   * Simulates a run to collect the keys the sub-resultproducer could generate.
+   * Does some checking on the keys and determines the template key.
+   * 
    * @param run the run number
    * @return a template key (null for the field being averaged)
    * @throws Exception if an error occurs
    */
-  protected Object [] determineTemplate(int run) throws Exception {
+  protected Object[] determineTemplate(int run) throws Exception {
 
     if (m_Instances == null) {
       throw new Exception("No Instances set");
@@ -238,11 +266,11 @@ public class AveragingResultProducer
     // Clear the collected results
     m_Keys.removeAllElements();
     m_Results.removeAllElements();
-    
+
     m_ResultProducer.doRunKeys(run);
     checkForMultipleDifferences();
 
-    Object [] template = (Object [])((Object [])m_Keys.elementAt(0)).clone();
+    Object[] template = ((Object[]) m_Keys.elementAt(0)).clone();
     template[m_KeyIndex] = null;
     // Check for duplicate keys
     checkForDuplicateKeys(template);
@@ -251,57 +279,59 @@ public class AveragingResultProducer
   }
 
   /**
-   * Gets the keys for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Keys
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the keys for a specified run number. Different run numbers correspond
+   * to different randomizations of the data. Keys produced should be sent to
+   * the current ResultListener
+   * 
    * @param run the run number to get keys for.
    * @throws Exception if a problem occurs while getting the keys
    */
+  @Override
   public void doRunKeys(int run) throws Exception {
 
     // Generate the template
-    Object [] template = determineTemplate(run);
-    String [] newKey = new String [template.length - 1];
+    Object[] template = determineTemplate(run);
+    String[] newKey = new String[template.length - 1];
     System.arraycopy(template, 0, newKey, 0, m_KeyIndex);
     System.arraycopy(template, m_KeyIndex + 1,
-		     newKey, m_KeyIndex,
-		     template.length - m_KeyIndex - 1);
-    m_ResultListener.acceptResult(this, newKey, null);      
+      newKey, m_KeyIndex,
+      template.length - m_KeyIndex - 1);
+    m_ResultListener.acceptResult(this, newKey, null);
   }
 
   /**
-   * Gets the results for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Results
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the results for a specified run number. Different run numbers
+   * correspond to different randomizations of the data. Results produced should
+   * be sent to the current ResultListener
+   * 
    * @param run the run number to get results for.
    * @throws Exception if a problem occurs while getting the results
    */
+  @Override
   public void doRun(int run) throws Exception {
 
     // Generate the key and ask whether the result is required
-    Object [] template = determineTemplate(run);
-    String [] newKey = new String [template.length - 1];
+    Object[] template = determineTemplate(run);
+    String[] newKey = new String[template.length - 1];
     System.arraycopy(template, 0, newKey, 0, m_KeyIndex);
     System.arraycopy(template, m_KeyIndex + 1,
-		     newKey, m_KeyIndex,
-		     template.length - m_KeyIndex - 1);
+      newKey, m_KeyIndex,
+      template.length - m_KeyIndex - 1);
 
     if (m_ResultListener.isResultRequired(this, newKey)) {
       // Clear the collected keys
       m_Keys.removeAllElements();
       m_Results.removeAllElements();
-      
+
       m_ResultProducer.doRun(run);
-      
+
       // Average the results collected
-      //System.err.println("Number of results collected: " + m_Keys.size());
-      
+      // System.err.println("Number of results collected: " + m_Keys.size());
+
       // Check that the keys only differ on the selected key field
       checkForMultipleDifferences();
-      
-      template = (Object [])((Object [])m_Keys.elementAt(0)).clone();
+
+      template = ((Object[]) m_Keys.elementAt(0)).clone();
       template[m_KeyIndex] = null;
       // Check for duplicate keys
       checkForDuplicateKeys(template);
@@ -310,185 +340,184 @@ public class AveragingResultProducer
     }
   }
 
-  
   /**
-   * Compares a key to a template to see whether they match. Null
-   * fields in the template are ignored in the matching.
-   *
+   * Compares a key to a template to see whether they match. Null fields in the
+   * template are ignored in the matching.
+   * 
    * @param template the template to match against
    * @param test the key to test
    * @return true if the test key matches the template on all non-null template
-   * fields
+   *         fields
    */
-  protected boolean matchesTemplate(Object [] template, Object [] test) {
-    
+  protected boolean matchesTemplate(Object[] template, Object[] test) {
+
     if (template.length != test.length) {
       return false;
     }
     for (int i = 0; i < test.length; i++) {
       if ((template[i] != null) && (!template[i].equals(test[i]))) {
-	return false;
+        return false;
       }
     }
     return true;
   }
-  
+
   /**
-   * Asks the resultlistener whether an average result is required, and
-   * if so, calculates it.
-   *
+   * Asks the resultlistener whether an average result is required, and if so,
+   * calculates it.
+   * 
    * @param template the template to match keys against when calculating the
-   * average
+   *          average
    * @throws Exception if an error occurs
    */
-  protected void doAverageResult(Object [] template) throws Exception {
+  protected void doAverageResult(Object[] template) throws Exception {
 
     // Generate the key and ask whether the result is required
-    String [] newKey = new String [template.length - 1];
+    String[] newKey = new String[template.length - 1];
     System.arraycopy(template, 0, newKey, 0, m_KeyIndex);
     System.arraycopy(template, m_KeyIndex + 1,
-		     newKey, m_KeyIndex,
-		     template.length - m_KeyIndex - 1);
+      newKey, m_KeyIndex,
+      template.length - m_KeyIndex - 1);
     if (m_ResultListener.isResultRequired(this, newKey)) {
-      Object [] resultTypes = m_ResultProducer.getResultTypes();
-      Stats [] stats = new Stats [resultTypes.length];
+      Object[] resultTypes = m_ResultProducer.getResultTypes();
+      Stats[] stats = new Stats[resultTypes.length];
       for (int i = 0; i < stats.length; i++) {
-	stats[i] = new Stats();
+        stats[i] = new Stats();
       }
-      Object [] result = getResultTypes();
+      Object[] result = getResultTypes();
       int numMatches = 0;
       for (int i = 0; i < m_Keys.size(); i++) {
-	Object [] currentKey = (Object [])m_Keys.elementAt(i);
-	// Skip non-matching keys
-	if (!matchesTemplate(template, currentKey)) {
-	  continue;
-	}
-	// Add the results to the stats accumulator
-	Object [] currentResult = (Object [])m_Results.elementAt(i);
-	numMatches++;
-	for (int j = 0; j < resultTypes.length; j++) {
-	  if (resultTypes[j] instanceof Double) {
-	    if (currentResult[j] == null) {
-
-	      // set the stats object for this result to null---
-	      // more than likely this is an additional measure field
-	      // not supported by the low level split evaluator
-	      if (stats[j] != null) {
-		stats[j] = null;
-	      }
-	      
-	      /* throw new Exception("Null numeric result field found:\n"
-		 + DatabaseUtils.arrayToString(currentKey)
-		 + " -- "
-		 + DatabaseUtils
-		 .arrayToString(currentResult)); */
-	    }
-	    if (stats[j] != null) {
-	      double currentVal = ((Double)currentResult[j]).doubleValue();
-	      stats[j].add(currentVal);
-	    }
-	  }
-	}
+        Object[] currentKey = (Object[]) m_Keys.elementAt(i);
+        // Skip non-matching keys
+        if (!matchesTemplate(template, currentKey)) {
+          continue;
+        }
+        // Add the results to the stats accumulator
+        Object[] currentResult = (Object[]) m_Results.elementAt(i);
+        numMatches++;
+        for (int j = 0; j < resultTypes.length; j++) {
+          if (resultTypes[j] instanceof Double) {
+            if (currentResult[j] == null) {
+
+              // set the stats object for this result to null---
+              // more than likely this is an additional measure field
+              // not supported by the low level split evaluator
+              if (stats[j] != null) {
+                stats[j] = null;
+              }
+
+              /*
+               * throw new Exception("Null numeric result field found:\n" +
+               * DatabaseUtils.arrayToString(currentKey) + " -- " +
+               * DatabaseUtils .arrayToString(currentResult));
+               */
+            }
+            if (stats[j] != null) {
+              double currentVal = ((Double) currentResult[j]).doubleValue();
+              stats[j].add(currentVal);
+            }
+          }
+        }
       }
       if (numMatches != m_ExpectedResultsPerAverage) {
-	throw new Exception("Expected " + m_ExpectedResultsPerAverage
-			    + " results matching key \""
-			    + DatabaseUtils.arrayToString(template)
-			    + "\" but got "
-			    + numMatches);
+        throw new Exception("Expected " + m_ExpectedResultsPerAverage
+          + " results matching key \""
+          + DatabaseUtils.arrayToString(template)
+          + "\" but got "
+          + numMatches);
       }
       result[0] = new Double(numMatches);
-      Object [] currentResult = (Object [])m_Results.elementAt(0);
+      Object[] currentResult = (Object[]) m_Results.elementAt(0);
       int k = 1;
       for (int j = 0; j < resultTypes.length; j++) {
-	if (resultTypes[j] instanceof Double) {
-	  if (stats[j] != null) {
-	    stats[j].calculateDerived();
-	    result[k++] = new Double(stats[j].mean);
-	  } else {
-	    result[k++] = null;
-	  }
-	  if (getCalculateStdDevs()) {
-	    if (stats[j] != null) {
-	      result[k++] = new Double(stats[j].stdDev);
-	    } else {
-	      result[k++] = null;
-	    }
-	  }
-	} else {
-	  result[k++] = currentResult[j];
-	}
+        if (resultTypes[j] instanceof Double) {
+          if (stats[j] != null) {
+            stats[j].calculateDerived();
+            result[k++] = new Double(stats[j].mean);
+          } else {
+            result[k++] = null;
+          }
+          if (getCalculateStdDevs()) {
+            if (stats[j] != null) {
+              result[k++] = new Double(stats[j].stdDev);
+            } else {
+              result[k++] = null;
+            }
+          }
+        } else {
+          result[k++] = currentResult[j];
+        }
       }
-      m_ResultListener.acceptResult(this, newKey, result);      
+      m_ResultListener.acceptResult(this, newKey, result);
     }
   }
-  
+
   /**
-   * Checks whether any duplicate results (with respect to a key template)
-   * were received.
-   *
+   * Checks whether any duplicate results (with respect to a key template) were
+   * received.
+   * 
    * @param template the template key.
    * @throws Exception if duplicate results are detected
    */
-  protected void checkForDuplicateKeys(Object [] template) throws Exception {
+  protected void checkForDuplicateKeys(Object[] template) throws Exception {
 
     Hashtable hash = new Hashtable();
     int numMatches = 0;
     for (int i = 0; i < m_Keys.size(); i++) {
-      Object [] current = (Object [])m_Keys.elementAt(i);
+      Object[] current = (Object[]) m_Keys.elementAt(i);
       // Skip non-matching keys
       if (!matchesTemplate(template, current)) {
-	continue;
+        continue;
       }
       if (hash.containsKey(current[m_KeyIndex])) {
-	throw new Exception("Duplicate result received:"
-			    + DatabaseUtils.arrayToString(current));
+        throw new Exception("Duplicate result received:"
+          + DatabaseUtils.arrayToString(current));
       }
       numMatches++;
       hash.put(current[m_KeyIndex], current[m_KeyIndex]);
     }
     if (numMatches != m_ExpectedResultsPerAverage) {
       throw new Exception("Expected " + m_ExpectedResultsPerAverage
-			  + " results matching key \""
-			  + DatabaseUtils.arrayToString(template)
-			  + "\" but got "
-			  + numMatches);
+        + " results matching key \""
+        + DatabaseUtils.arrayToString(template)
+        + "\" but got "
+        + numMatches);
     }
   }
-  
+
   /**
-   * Checks that the keys for a run only differ in one key field. If they
-   * differ in more than one field, a more sophisticated averager will submit
-   * multiple results - for now an exception is thrown. Currently assumes that
-   * the most differences will be shown between the first and last
-   * result received.
-   *
-   * @throws Exception if the keys differ on fields other than the
-   * key averaging field
+   * Checks that the keys for a run only differ in one key field. If they differ
+   * in more than one field, a more sophisticated averager will submit multiple
+   * results - for now an exception is thrown. Currently assumes that the most
+   * differences will be shown between the first and last result received.
+   * 
+   * @throws Exception if the keys differ on fields other than the key averaging
+   *           field
    */
   protected void checkForMultipleDifferences() throws Exception {
-    
-    Object [] firstKey = (Object [])m_Keys.elementAt(0);
-    Object [] lastKey = (Object [])m_Keys.elementAt(m_Keys.size() - 1);
+
+    Object[] firstKey = (Object[]) m_Keys.elementAt(0);
+    Object[] lastKey = (Object[]) m_Keys.elementAt(m_Keys.size() - 1);
     /*
-    System.err.println("First key:" +  DatabaseUtils.arrayToString(firstKey));
-    System.err.println("Last key :" + DatabaseUtils.arrayToString(lastKey));
-    */
+     * System.err.println("First key:" + DatabaseUtils.arrayToString(firstKey));
+     * System.err.println("Last key :" + DatabaseUtils.arrayToString(lastKey));
+     */
     for (int i = 0; i < firstKey.length; i++) {
       if ((i != m_KeyIndex) && !firstKey[i].equals(lastKey[i])) {
-	throw new Exception("Keys differ on fields other than \""
-			    + m_KeyFieldName
-			    + "\" -- time to implement multiple averaging");
+        throw new Exception("Keys differ on fields other than \""
+          + m_KeyFieldName
+          + "\" -- time to implement multiple averaging");
       }
     }
   }
-  
+
   /**
    * Prepare for the results to be received.
-   *
+   * 
    * @param rp the ResultProducer that will generate the results
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess(ResultProducer rp) throws Exception {
 
     if (m_ResultListener == null) {
@@ -500,11 +529,12 @@ public class AveragingResultProducer
   /**
    * Prepare to generate results. The ResultProducer should call
    * preProcess(this) on the ResultListener it is to send results to.
-   *
+   * 
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess() throws Exception {
-    
+
     if (m_ResultProducer == null) {
       throw new Exception("No ResultProducer set");
     }
@@ -513,48 +543,50 @@ public class AveragingResultProducer
     findKeyIndex();
     if (m_KeyIndex == -1) {
       throw new Exception("No key field called " + m_KeyFieldName
-			  + " produced by "
-			  + m_ResultProducer.getClass().getName());
+        + " produced by "
+        + m_ResultProducer.getClass().getName());
     }
     m_ResultProducer.preProcess();
   }
-  
+
   /**
-   * When this method is called, it indicates that no more results
-   * will be sent that need to be grouped together in any way.
-   *
+   * When this method is called, it indicates that no more results will be sent
+   * that need to be grouped together in any way.
+   * 
    * @param rp the ResultProducer that generated the results
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess(ResultProducer rp) throws Exception {
 
     m_ResultListener.postProcess(this);
   }
 
   /**
-   * When this method is called, it indicates that no more requests to
-   * generate results for the current experiment will be sent. The
-   * ResultProducer should call preProcess(this) on the
-   * ResultListener it is to send results to.
-   *
+   * When this method is called, it indicates that no more requests to generate
+   * results for the current experiment will be sent. The ResultProducer should
+   * call preProcess(this) on the ResultListener it is to send results to.
+   * 
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess() throws Exception {
 
     m_ResultProducer.postProcess();
   }
-  
+
   /**
    * Accepts results from a ResultProducer.
-   *
+   * 
    * @param rp the ResultProducer that generated the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
-   * @param result the results stored in an array. The objects stored in
-   * the array may be Strings, Doubles, or null (for the missing value).
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
+   * @param result the results stored in an array. The objects stored in the
+   *          array may be Strings, Doubles, or null (for the missing value).
    * @throws Exception if the result could not be accepted.
    */
-  public void acceptResult(ResultProducer rp, Object [] key, Object [] result)
+  @Override
+  public void acceptResult(ResultProducer rp, Object[] key, Object[] result)
     throws Exception {
 
     if (m_ResultProducer != rp) {
@@ -565,17 +597,16 @@ public class AveragingResultProducer
   }
 
   /**
-   * Determines whether the results for a specified key must be
-   * generated.
-   *
+   * Determines whether the results for a specified key must be generated.
+   * 
    * @param rp the ResultProducer wanting to generate the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
    * @return true if the result should be generated
-   * @throws Exception if it could not be determined if the result 
-   * is needed.
+   * @throws Exception if it could not be determined if the result is needed.
    */
-  public boolean isResultRequired(ResultProducer rp, Object [] key) 
+  @Override
+  public boolean isResultRequired(ResultProducer rp, Object[] key)
     throws Exception {
 
     if (m_ResultProducer != rp) {
@@ -586,89 +617,91 @@ public class AveragingResultProducer
 
   /**
    * Gets the names of each of the columns produced for a single run.
-   *
+   * 
    * @return an array containing the name of each column
    * @throws Exception if key names cannot be generated
    */
-  public String [] getKeyNames() throws Exception {
+  @Override
+  public String[] getKeyNames() throws Exception {
 
     if (m_KeyIndex == -1) {
       throw new Exception("No key field called " + m_KeyFieldName
-			  + " produced by "
-			  + m_ResultProducer.getClass().getName());
+        + " produced by "
+        + m_ResultProducer.getClass().getName());
     }
-    String [] keyNames = m_ResultProducer.getKeyNames();
-    String [] newKeyNames = new String [keyNames.length - 1];
+    String[] keyNames = m_ResultProducer.getKeyNames();
+    String[] newKeyNames = new String[keyNames.length - 1];
     System.arraycopy(keyNames, 0, newKeyNames, 0, m_KeyIndex);
     System.arraycopy(keyNames, m_KeyIndex + 1,
-		     newKeyNames, m_KeyIndex,
-		     keyNames.length - m_KeyIndex - 1);
+      newKeyNames, m_KeyIndex,
+      keyNames.length - m_KeyIndex - 1);
     return newKeyNames;
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
-   * @throws Exception if the key types could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
+   * @throws Exception if the key types could not be determined (perhaps because
+   *           of a problem from a nested sub-resultproducer)
    */
-  public Object [] getKeyTypes() throws Exception {
+  @Override
+  public Object[] getKeyTypes() throws Exception {
 
     if (m_KeyIndex == -1) {
       throw new Exception("No key field called " + m_KeyFieldName
-			  + " produced by "
-			  + m_ResultProducer.getClass().getName());
+        + " produced by "
+        + m_ResultProducer.getClass().getName());
     }
-    Object [] keyTypes = m_ResultProducer.getKeyTypes();
+    Object[] keyTypes = m_ResultProducer.getKeyTypes();
     // Find and remove the key field that is being averaged over
-    Object [] newKeyTypes = new String [keyTypes.length - 1];
+    Object[] newKeyTypes = new String[keyTypes.length - 1];
     System.arraycopy(keyTypes, 0, newKeyTypes, 0, m_KeyIndex);
     System.arraycopy(keyTypes, m_KeyIndex + 1,
-		     newKeyTypes, m_KeyIndex,
-		     keyTypes.length - m_KeyIndex - 1);
+      newKeyTypes, m_KeyIndex,
+      keyTypes.length - m_KeyIndex - 1);
     return newKeyTypes;
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * A new result field is added for the number of results used to
-   * produce each average.
-   * If only averages are being produced the names are not altered, if
-   * standard deviations are produced then "Dev_" and "Avg_" are prepended
-   * to each result deviation and average field respectively.
-   *
+   * Gets the names of each of the columns produced for a single run. A new
+   * result field is added for the number of results used to produce each
+   * average. If only averages are being produced the names are not altered, if
+   * standard deviations are produced then "Dev_" and "Avg_" are prepended to
+   * each result deviation and average field respectively.
+   * 
    * @return an array containing the name of each column
    * @throws Exception if the result names could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   *           because of a problem from a nested sub-resultproducer)
    */
-  public String [] getResultNames() throws Exception {
+  @Override
+  public String[] getResultNames() throws Exception {
 
-    String [] resultNames = m_ResultProducer.getResultNames();
+    String[] resultNames = m_ResultProducer.getResultNames();
     // Add in the names of our extra Result fields
     if (getCalculateStdDevs()) {
-      Object [] resultTypes = m_ResultProducer.getResultTypes();
+      Object[] resultTypes = m_ResultProducer.getResultTypes();
       int numNumeric = 0;
-      for (int i = 0; i < resultTypes.length; i++) {
-	if (resultTypes[i] instanceof Double) {
-	  numNumeric++;
-	}
+      for (Object resultType : resultTypes) {
+        if (resultType instanceof Double) {
+          numNumeric++;
+        }
       }
-      String [] newResultNames = new String [resultNames.length +
-					    1 + numNumeric];
+      String[] newResultNames = new String[resultNames.length +
+        1 + numNumeric];
       newResultNames[0] = m_CountFieldName;
       int j = 1;
       for (int i = 0; i < resultNames.length; i++) {
-	newResultNames[j++] = "Avg_" + resultNames[i];
-	if (resultTypes[i] instanceof Double) {
-	  newResultNames[j++] = "Dev_" + resultNames[i];
-	}
+        newResultNames[j++] = "Avg_" + resultNames[i];
+        if (resultTypes[i] instanceof Double) {
+          newResultNames[j++] = "Dev_" + resultNames[i];
+        }
       }
       return newResultNames;
     } else {
-      String [] newResultNames = new String [resultNames.length + 1];
+      String[] newResultNames = new String[resultNames.length + 1];
       newResultNames[0] = m_CountFieldName;
       System.arraycopy(resultNames, 0, newResultNames, 1, resultNames.length);
       return newResultNames;
@@ -677,36 +710,37 @@ public class AveragingResultProducer
 
   /**
    * Gets the data types of each of the columns produced for a single run.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    * @throws Exception if the result types could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   *           because of a problem from a nested sub-resultproducer)
    */
-  public Object [] getResultTypes() throws Exception {
+  @Override
+  public Object[] getResultTypes() throws Exception {
 
-    Object [] resultTypes = m_ResultProducer.getResultTypes();
+    Object[] resultTypes = m_ResultProducer.getResultTypes();
     // Add in the types of our extra Result fields
     if (getCalculateStdDevs()) {
       int numNumeric = 0;
-      for (int i = 0; i < resultTypes.length; i++) {
-	if (resultTypes[i] instanceof Double) {
-	  numNumeric++;
-	}
+      for (Object resultType : resultTypes) {
+        if (resultType instanceof Double) {
+          numNumeric++;
+        }
       }
-      Object [] newResultTypes = new Object [resultTypes.length +
-					    1 + numNumeric];
+      Object[] newResultTypes = new Object[resultTypes.length +
+        1 + numNumeric];
       newResultTypes[0] = new Double(0);
       int j = 1;
-      for (int i = 0; i < resultTypes.length; i++) {
-	newResultTypes[j++] = resultTypes[i];
-	if (resultTypes[i] instanceof Double) {
-	  newResultTypes[j++] = new Double(0);
-	}
+      for (Object resultType : resultTypes) {
+        newResultTypes[j++] = resultType;
+        if (resultType instanceof Double) {
+          newResultTypes[j++] = new Double(0);
+        }
       }
       return newResultTypes;
     } else {
-      Object [] newResultTypes = new Object [resultTypes.length + 1];
+      Object[] newResultTypes = new Object[resultTypes.length + 1];
       newResultTypes[0] = new Double(0);
       System.arraycopy(resultTypes, 0, newResultTypes, 1, resultTypes.length);
       return newResultTypes;
@@ -714,19 +748,19 @@ public class AveragingResultProducer
   }
 
   /**
-   * Gets a description of the internal settings of the result
-   * producer, sufficient for distinguishing a ResultProducer
-   * instance from another with different settings (ignoring
-   * those settings set through this interface). For example,
-   * a cross-validation ResultProducer may have a setting for the
-   * number of folds. For a given state, the results produced should
-   * be compatible. Typically if a ResultProducer is an OptionHandler,
-   * this string will represent the command line arguments required
-   * to set the ResultProducer to that state.
-   *
-   * @return the description of the ResultProducer state, or null
-   * if no state is defined
+   * Gets a description of the internal settings of the result producer,
+   * sufficient for distinguishing a ResultProducer instance from another with
+   * different settings (ignoring those settings set through this interface).
+   * For example, a cross-validation ResultProducer may have a setting for the
+   * number of folds. For a given state, the results produced should be
+   * compatible. Typically if a ResultProducer is an OptionHandler, this string
+   * will represent the command line arguments required to set the
+   * ResultProducer to that state.
+   * 
+   * @return the description of the ResultProducer state, or null if no state is
+   *         defined
    */
+  @Override
   public String getCompatibilityState() {
 
     String result = // "-F " + Utils.quote(getKeyFieldName())
@@ -738,140 +772,168 @@ public class AveragingResultProducer
       result += "<null ResultProducer>";
     } else {
       result += "-W " + m_ResultProducer.getClass().getName();
-      result  += " -- " + m_ResultProducer.getCompatibilityState();
+      result += " -- " + m_ResultProducer.getCompatibilityState();
     }
 
     return result.trim();
   }
 
-
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(2);
 
     newVector.addElement(new Option(
-	     "\tThe name of the field to average over.\n"
-	      +"\t(default \"Fold\")", 
-	     "F", 1, 
-	     "-F <field name>"));
+      "\tThe name of the field to average over.\n"
+        + "\t(default \"Fold\")",
+      "F", 1,
+      "-F <field name>"));
     newVector.addElement(new Option(
-	     "\tThe number of results expected per average.\n"
-	      +"\t(default 10)", 
-	     "X", 1, 
-	     "-X <num results>"));
+      "\tThe number of results expected per average.\n"
+        + "\t(default 10)",
+      "X", 1,
+      "-X <num results>"));
     newVector.addElement(new Option(
-	     "\tCalculate standard deviations.\n"
-	      +"\t(default only averages)", 
-	     "S", 0, 
-	     "-S"));
+      "\tCalculate standard deviations.\n"
+        + "\t(default only averages)",
+      "S", 0,
+      "-S"));
     newVector.addElement(new Option(
-	     "\tThe full class name of a ResultProducer.\n"
-	      +"\teg: weka.experiment.CrossValidationResultProducer", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of a ResultProducer.\n"
+        + "\teg: weka.experiment.CrossValidationResultProducer",
+      "W", 1,
+      "-W <class name>"));
 
     if ((m_ResultProducer != null) &&
-	(m_ResultProducer instanceof OptionHandler)) {
+      (m_ResultProducer instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to result producer "
-	     + m_ResultProducer.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_ResultProducer).listOptions();
+        "",
+        "", 0, "\nOptions specific to result producer "
+          + m_ResultProducer.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_ResultProducer).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
    * 
-   * <pre> -F <field name>
+   * <!-- options-start --> Valid options are:
+   * <p/>
+   * 
+   * <pre>
+   * -F <field name>
    *  The name of the field to average over.
-   *  (default "Fold")</pre>
+   *  (default "Fold")
+   * </pre>
    * 
-   * <pre> -X <num results>
+   * <pre>
+   * -X <num results>
    *  The number of results expected per average.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -S
+   * <pre>
+   * -S
    *  Calculate standard deviations.
-   *  (default only averages)</pre>
+   *  (default only averages)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a ResultProducer.
-   *  eg: weka.experiment.CrossValidationResultProducer</pre>
+   *  eg: weka.experiment.CrossValidationResultProducer
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to result producer weka.experiment.CrossValidationResultProducer:
    * </pre>
    * 
-   * <pre> -X <number of folds>
+   * <pre>
+   * -X <number of folds>
    *  The number of folds to use for the cross-validation.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -D
-   * Save raw split evaluator output.</pre>
+   * <pre>
+   * -D
+   * Save raw split evaluator output.
+   * </pre>
    * 
-   * <pre> -O <file/directory name/path>
+   * <pre>
+   * -O <file/directory name/path>
    *  The filename where raw output will be stored.
    *  If a directory name is specified then then individual
    *  outputs will be gzipped, otherwise all output will be
-   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a SplitEvaluator.
-   *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+   *  eg: weka.experiment.ClassifierSplitEvaluator
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
    * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All options after -- will be passed to the result producer.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     String keyFieldName = Utils.getOption('F', options);
     if (keyFieldName.length() != 0) {
       setKeyFieldName(keyFieldName);
@@ -887,39 +949,38 @@ public class AveragingResultProducer
     }
 
     setCalculateStdDevs(Utils.getFlag('S', options));
-    
+
     String rpName = Utils.getOption('W', options);
-    if (rpName.length() == 0) {
-      throw new Exception("A ResultProducer must be specified with"
-			  + " the -W option.");
+    if (rpName.length() > 0) {
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // RP.
+      setResultProducer((ResultProducer) Utils.forName(
+        ResultProducer.class,
+        rpName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // RP.
-    setResultProducer((ResultProducer)Utils.forName(
-		      ResultProducer.class,
-		      rpName,
-		      null));
     if (getResultProducer() instanceof OptionHandler) {
       ((OptionHandler) getResultProducer())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
     }
   }
 
   /**
    * Gets the current settings of the result producer.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] seOptions = new String [0];
-    if ((m_ResultProducer != null) && 
-	(m_ResultProducer instanceof OptionHandler)) {
-      seOptions = ((OptionHandler)m_ResultProducer).getOptions();
+    String[] seOptions = new String[0];
+    if ((m_ResultProducer != null) &&
+      (m_ResultProducer instanceof OptionHandler)) {
+      seOptions = ((OptionHandler) m_ResultProducer).getOptions();
     }
-    
-    String [] options = new String [seOptions.length + 8];
+
+    String[] options = new String[seOptions.length + 8];
     int current = 0;
 
     options[current++] = "-F";
@@ -935,8 +996,8 @@ public class AveragingResultProducer
     }
     options[current++] = "--";
 
-    System.arraycopy(seOptions, 0, options, current, 
-		     seOptions.length);
+    System.arraycopy(seOptions, 0, options, current,
+      seOptions.length);
     current += seOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -945,36 +1006,40 @@ public class AveragingResultProducer
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in SplitEvaluators. This could contain many measures (of which only a
-   * subset may be produceable by the current resultProducer) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * SplitEvaluators. This could contain many measures (of which only a subset
+   * may be produceable by the current resultProducer) if an experiment is the
+   * type that iterates over a set of properties.
+   * 
    * @param additionalMeasures an array of measure names, null if none
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     m_AdditionalMeasures = additionalMeasures;
 
     if (m_ResultProducer != null) {
       System.err.println("AveragingResultProducer: setting additional "
-			 +"measures for "
-			 +"ResultProducer");
+        + "measures for "
+        + "ResultProducer");
       m_ResultProducer.setAdditionalMeasures(m_AdditionalMeasures);
     }
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the result producer
+   * Returns an enumeration of any additional measure names that might be in the
+   * result producer
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_ResultProducer).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_ResultProducer).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
@@ -982,36 +1047,40 @@ public class AveragingResultProducer
 
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_ResultProducer).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_ResultProducer).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("AveragingResultProducer: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_ResultProducer.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_ResultProducer.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
 
   /**
    * Sets the dataset that results will be obtained for.
-   *
+   * 
    * @param instances a value of type 'Instances'.
    */
+  @Override
   public void setInstances(Instances instances) {
-    
+
     m_Instances = instances;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String calculateStdDevsTipText() {
     return "Record standard deviations for each run.";
@@ -1019,61 +1088,63 @@ public class AveragingResultProducer
 
   /**
    * Get the value of CalculateStdDevs.
-   *
+   * 
    * @return Value of CalculateStdDevs.
    */
   public boolean getCalculateStdDevs() {
-    
+
     return m_CalculateStdDevs;
   }
-  
+
   /**
    * Set the value of CalculateStdDevs.
-   *
+   * 
    * @param newCalculateStdDevs Value to assign to CalculateStdDevs.
    */
   public void setCalculateStdDevs(boolean newCalculateStdDevs) {
-    
+
     m_CalculateStdDevs = newCalculateStdDevs;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String expectedResultsPerAverageTipText() {
     return "Set the expected number of results to average per run. "
-      +"For example if a CrossValidationResultProducer is being used "
-      +"(with the number of folds set to 10), then the expected number "
-      +"of results per run is 10.";
+      + "For example if a CrossValidationResultProducer is being used "
+      + "(with the number of folds set to 10), then the expected number "
+      + "of results per run is 10.";
   }
 
   /**
    * Get the value of ExpectedResultsPerAverage.
-   *
+   * 
    * @return Value of ExpectedResultsPerAverage.
    */
   public int getExpectedResultsPerAverage() {
-    
+
     return m_ExpectedResultsPerAverage;
   }
-  
+
   /**
    * Set the value of ExpectedResultsPerAverage.
-   *
+   * 
    * @param newExpectedResultsPerAverage Value to assign to
-   * ExpectedResultsPerAverage.
+   *          ExpectedResultsPerAverage.
    */
   public void setExpectedResultsPerAverage(int newExpectedResultsPerAverage) {
-    
+
     m_ExpectedResultsPerAverage = newExpectedResultsPerAverage;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String keyFieldNameTipText() {
     return "Set the field name that will be unique for a run.";
@@ -1081,40 +1152,42 @@ public class AveragingResultProducer
 
   /**
    * Get the value of KeyFieldName.
-   *
+   * 
    * @return Value of KeyFieldName.
    */
   public String getKeyFieldName() {
-    
+
     return m_KeyFieldName;
   }
-  
+
   /**
    * Set the value of KeyFieldName.
-   *
+   * 
    * @param newKeyFieldName Value to assign to KeyFieldName.
    */
   public void setKeyFieldName(String newKeyFieldName) {
-    
+
     m_KeyFieldName = newKeyFieldName;
     m_CountFieldName = "Num_" + m_KeyFieldName;
     findKeyIndex();
   }
-  
+
   /**
    * Sets the object to send results of each run to.
-   *
+   * 
    * @param listener a value of type 'ResultListener'
    */
+  @Override
   public void setResultListener(ResultListener listener) {
 
     m_ResultListener = listener;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String resultProducerTipText() {
     return "Set the resultProducer for which results are to be averaged.";
@@ -1122,17 +1195,17 @@ public class AveragingResultProducer
 
   /**
    * Get the ResultProducer.
-   *
+   * 
    * @return the ResultProducer.
    */
   public ResultProducer getResultProducer() {
-    
+
     return m_ResultProducer;
   }
-  
+
   /**
    * Set the ResultProducer.
-   *
+   * 
    * @param newResultProducer new ResultProducer to use.
    */
   public void setResultProducer(ResultProducer newResultProducer) {
@@ -1144,9 +1217,10 @@ public class AveragingResultProducer
 
   /**
    * Gets a text descrption of the result producer.
-   *
+   * 
    * @return a text description of the result producer.
    */
+  @Override
   public String toString() {
 
     String result = "AveragingResultProducer: ";
@@ -1158,13 +1232,14 @@ public class AveragingResultProducer
     }
     return result;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6419 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // AveragingResultProducer
diff --git a/src/main/java/weka/experiment/ClassifierSplitEvaluator.java b/src/main/java/weka/experiment/ClassifierSplitEvaluator.java
index 7a8833d..47299d5 100644
--- a/src/main/java/weka/experiment/ClassifierSplitEvaluator.java
+++ b/src/main/java/weka/experiment/ClassifierSplitEvaluator.java
@@ -20,9 +20,17 @@
  *
  */
 
-
 package weka.experiment;
 
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+import java.util.Enumeration;
+import java.util.Vector;
+
 import weka.classifiers.Classifier;
 import weka.classifiers.Evaluation;
 import weka.classifiers.rules.ZeroR;
@@ -37,66 +45,66 @@ import weka.core.RevisionUtils;
 import weka.core.Summarizable;
 import weka.core.Utils;
 
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamClass;
-import java.io.Serializable;
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadMXBean;
-import java.util.Enumeration;
-import java.util.Vector;
-
-
 /**
- <!-- globalinfo-start -->
- * A SplitEvaluator that produces results for a classification scheme on a nominal class attribute.
+ * <!-- globalinfo-start --> A SplitEvaluator that produces results for a
+ * classification scheme on a nominal class attribute.
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * All options after -- will be passed to the classifier.
- *
+ * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 7513 $
+ * @version $Revision: 11198 $
  */
-public class ClassifierSplitEvaluator 
-  implements SplitEvaluator, OptionHandler, AdditionalMeasureProducer, 
-             RevisionHandler {
-  
+public class ClassifierSplitEvaluator
+  implements SplitEvaluator, OptionHandler, AdditionalMeasureProducer,
+  RevisionHandler {
+
   /** for serialization */
   static final long serialVersionUID = -8511241602760467265L;
-  
+
   /** The template classifier */
   protected Classifier m_Template = new ZeroR();
 
@@ -104,16 +112,20 @@ public class ClassifierSplitEvaluator
   protected Classifier m_Classifier;
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
+  protected String[] m_AdditionalMeasures = null;
 
-  /** Array of booleans corresponding to the measures in m_AdditionalMeasures
-      indicating which of the AdditionalMeasures the current classifier
-      can produce */
-  protected boolean [] m_doesProduce = null;
+  /**
+   * Array of booleans corresponding to the measures in m_AdditionalMeasures
+   * indicating which of the AdditionalMeasures the current classifier can
+   * produce
+   */
+  protected boolean[] m_doesProduce = null;
 
-  /** The number of additional measures that need to be filled in
-      after taking into account column constraints imposed by the final
-      destination for results */
+  /**
+   * The number of additional measures that need to be filled in after taking
+   * into account column constraints imposed by the final destination for
+   * results
+   */
   protected int m_numberAdditionalMeasures = 0;
 
   /** Holds the statistics for the most recent application of the classifier */
@@ -133,14 +145,14 @@ public class ClassifierSplitEvaluator
 
   /** The number of IR statistics */
   private static final int NUM_IR_STATISTICS = 14;
-  
+
   /** The number of averaged IR statistics */
   private static final int NUM_WEIGHTED_IR_STATISTICS = 8;
-  
+
   /** Class index for information retrieval statistics (default 0) */
   private int m_IRclass = 0;
-  
-  /** Flag for prediction and target columns output.*/
+
+  /** Flag for prediction and target columns output. */
   private boolean m_predTargetColumn = false;
 
   /** Attribute index of instance identifier (default -1) */
@@ -156,115 +168,128 @@ public class ClassifierSplitEvaluator
 
   /**
    * Returns a string describing this split evaluator
-   * @return a description of the split evaluator suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the split evaluator suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return " A SplitEvaluator that produces results for a classification "
-      +"scheme on a nominal class attribute.";
+      + "scheme on a nominal class attribute.";
   }
 
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(4);
 
     newVector.addElement(new Option(
-	     "\tThe full class name of the classifier.\n"
-	      +"\teg: weka.classifiers.bayes.NaiveBayes", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of the classifier.\n"
+        + "\teg: weka.classifiers.bayes.NaiveBayes",
+      "W", 1,
+      "-W <class name>"));
     newVector.addElement(new Option(
-	     "\tThe index of the class for which IR statistics\n" +
-	     "\tare to be output. (default 1)",
-	     "C", 1, 
-	     "-C <index>"));
+      "\tThe index of the class for which IR statistics\n" +
+        "\tare to be output. (default 1)",
+      "C", 1,
+      "-C <index>"));
     newVector.addElement(new Option(
-	     "\tThe index of an attribute to output in the\n" +
-	     "\tresults. This attribute should identify an\n" +
-             "\tinstance in order to know which instances are\n" +
-             "\tin the test set of a cross validation. if 0\n" +
-             "\tno output (default 0).",
-	     "I", 1, 
-	     "-I <index>"));
+      "\tThe index of an attribute to output in the\n" +
+        "\tresults. This attribute should identify an\n" +
+        "\tinstance in order to know which instances are\n" +
+        "\tin the test set of a cross validation. if 0\n" +
+        "\tno output (default 0).",
+      "I", 1,
+      "-I <index>"));
     newVector.addElement(new Option(
-	     "\tAdd target and prediction columns to the result\n" +
-             "\tfor each fold.",
-	     "P", 0, 
-	     "-P"));
+      "\tAdd target and prediction columns to the result\n" +
+        "\tfor each fold.",
+      "P", 0,
+      "-P"));
 
     if ((m_Template != null) &&
-	(m_Template instanceof OptionHandler)) {
+      (m_Template instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to classifier "
-	     + m_Template.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_Template).listOptions();
+        "",
+        "", 0, "\nOptions specific to classifier "
+          + m_Template.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_Template).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All options after -- will be passed to the classifier.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     String cName = Utils.getOption('W', options);
-    if (cName.length() == 0) {
-      throw new Exception("A classifier must be specified with"
-			  + " the -W option.");
+    if (cName.length() > 0) {
+
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // Classifier.
+      setClassifier(Classifier.forName(cName, null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // Classifier.
-    setClassifier(Classifier.forName(cName, null));
     if (getClassifier() instanceof OptionHandler) {
       ((OptionHandler) getClassifier())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
       updateOptions();
     }
 
@@ -281,41 +306,44 @@ public class ClassifierSplitEvaluator
     } else {
       m_attID = -1;
     }
-    
+
     m_predTargetColumn = Utils.getFlag('P', options);
   }
 
   /**
    * Gets the current settings of the Classifier.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] classifierOptions = new String [0];
-    if ((m_Template != null) && 
-	(m_Template instanceof OptionHandler)) {
-      classifierOptions = ((OptionHandler)m_Template).getOptions();
+    String[] classifierOptions = new String[0];
+    if ((m_Template != null) &&
+      (m_Template instanceof OptionHandler)) {
+      classifierOptions = ((OptionHandler) m_Template).getOptions();
     }
-    
-    String [] options = new String [classifierOptions.length + 8];
+
+    String[] options = new String[classifierOptions.length + 8];
     int current = 0;
 
     if (getClassifier() != null) {
       options[current++] = "-W";
       options[current++] = getClassifier().getClass().getName();
     }
-    options[current++] = "-I"; 
+    options[current++] = "-I";
     options[current++] = "" + (m_attID + 1);
 
-    if (getPredTargetColumn()) options[current++] = "-P";
-    
-    options[current++] = "-C"; 
+    if (getPredTargetColumn()) {
+      options[current++] = "-P";
+    }
+
+    options[current++] = "-C";
     options[current++] = "" + (m_IRclass + 1);
     options[current++] = "--";
-    
-    System.arraycopy(classifierOptions, 0, options, current, 
-		     classifierOptions.length);
+
+    System.arraycopy(classifierOptions, 0, options, current,
+      classifierOptions.length);
     current += classifierOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -324,32 +352,34 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in Classifiers. This could contain many measures (of which only a
-   * subset may be produceable by the current Classifier) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * Classifiers. This could contain many measures (of which only a subset may
+   * be produceable by the current Classifier) if an experiment is the type that
+   * iterates over a set of properties.
+   * 
    * @param additionalMeasures a list of method names
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     // System.err.println("ClassifierSplitEvaluator: setting additional measures");
     m_AdditionalMeasures = additionalMeasures;
-    
+
     // determine which (if any) of the additional measures this classifier
     // can produce
     if (m_AdditionalMeasures != null && m_AdditionalMeasures.length > 0) {
-      m_doesProduce = new boolean [m_AdditionalMeasures.length];
+      m_doesProduce = new boolean[m_AdditionalMeasures.length];
 
       if (m_Template instanceof AdditionalMeasureProducer) {
-	Enumeration en = ((AdditionalMeasureProducer)m_Template).
-	  enumerateMeasures();
-	while (en.hasMoreElements()) {
-	  String mname = (String)en.nextElement();
-	  for (int j=0;j<m_AdditionalMeasures.length;j++) {
-	    if (mname.compareToIgnoreCase(m_AdditionalMeasures[j]) == 0) {
-	      m_doesProduce[j] = true;
-	    }
-	  }
-	}
+        Enumeration en = ((AdditionalMeasureProducer) m_Template).
+          enumerateMeasures();
+        while (en.hasMoreElements()) {
+          String mname = (String) en.nextElement();
+          for (int j = 0; j < m_AdditionalMeasures.length; j++) {
+            if (mname.compareToIgnoreCase(m_AdditionalMeasures[j]) == 0) {
+              m_doesProduce[j] = true;
+            }
+          }
+        }
       }
     } else {
       m_doesProduce = null;
@@ -357,57 +387,61 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the classifier
+   * Returns an enumeration of any additional measure names that might be in the
+   * classifier
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_Template instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_Template).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_Template).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
   }
-  
+
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_Template instanceof AdditionalMeasureProducer) {
       if (m_Classifier == null) {
-	throw new IllegalArgumentException("ClassifierSplitEvaluator: " +
-					   "Can't return result for measure, " +
-					   "classifier has not been built yet.");
+        throw new IllegalArgumentException("ClassifierSplitEvaluator: " +
+          "Can't return result for measure, " +
+          "classifier has not been built yet.");
       }
-      return ((AdditionalMeasureProducer)m_Classifier).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_Classifier).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("ClassifierSplitEvaluator: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_Template.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_Template.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
 
   /**
    * Gets the data types of each of the key columns produced for a single run.
-   * The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
-   * @return an array containing objects of the type of each key column. The 
-   * objects should be Strings, or Doubles.
+   * The number of key fields must be constant for a given SplitEvaluator.
+   * 
+   * @return an array containing objects of the type of each key column. The
+   *         objects should be Strings, or Doubles.
    */
-  public Object [] getKeyTypes() {
+  @Override
+  public Object[] getKeyTypes() {
 
-    Object [] keyTypes = new Object[KEY_SIZE];
+    Object[] keyTypes = new Object[KEY_SIZE];
     keyTypes[0] = "";
     keyTypes[1] = "";
     keyTypes[2] = "";
@@ -415,15 +449,15 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Gets the names of each of the key columns produced for a single run.
-   * The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the names of each of the key columns produced for a single run. The
+   * number of key fields must be constant for a given SplitEvaluator.
+   * 
    * @return an array containing the name of each key column
    */
-  public String [] getKeyNames() {
+  @Override
+  public String[] getKeyNames() {
 
-    String [] keyNames = new String[KEY_SIZE];
+    String[] keyNames = new String[KEY_SIZE];
     keyNames[0] = "Scheme";
     keyNames[1] = "Scheme_options";
     keyNames[2] = "Scheme_version_ID";
@@ -431,16 +465,17 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Gets the key describing the current SplitEvaluator. For example
-   * This may contain the name of the classifier used for classifier
-   * predictive evaluation. The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the key describing the current SplitEvaluator. For example This may
+   * contain the name of the classifier used for classifier predictive
+   * evaluation. The number of key fields must be constant for a given
+   * SplitEvaluator.
+   * 
    * @return an array of objects containing the key.
    */
-  public Object [] getKey(){
+  @Override
+  public Object[] getKey() {
 
-    Object [] key = new Object[KEY_SIZE];
+    Object[] key = new Object[KEY_SIZE];
     key[0] = m_Template.getClass().getName();
     key[1] = m_ClassifierOptions;
     key[2] = m_ClassifierVersion;
@@ -448,23 +483,28 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Gets the data types of each of the result columns produced for a 
-   * single run. The number of result fields must be constant
-   * for a given SplitEvaluator.
-   *
-   * @return an array containing objects of the type of each result column. 
-   * The objects should be Strings, or Doubles.
+   * Gets the data types of each of the result columns produced for a single
+   * run. The number of result fields must be constant for a given
+   * SplitEvaluator.
+   * 
+   * @return an array containing objects of the type of each result column. The
+   *         objects should be Strings, or Doubles.
    */
-  public Object [] getResultTypes() {
-    int addm = (m_AdditionalMeasures != null) 
-      ? m_AdditionalMeasures.length 
+  @Override
+  public Object[] getResultTypes() {
+    int addm = (m_AdditionalMeasures != null)
+      ? m_AdditionalMeasures.length
       : 0;
-    int overall_length = RESULT_SIZE+addm;
+    int overall_length = RESULT_SIZE + addm;
     overall_length += NUM_IR_STATISTICS;
     overall_length += NUM_WEIGHTED_IR_STATISTICS;
-    if (getAttributeID() >= 0) overall_length += 1;
-    if (getPredTargetColumn()) overall_length += 2;
-    Object [] resultTypes = new Object[overall_length];
+    if (getAttributeID() >= 0) {
+      overall_length += 1;
+    }
+    if (getPredTargetColumn()) {
+      overall_length += 2;
+    }
+    Object[] resultTypes = new Object[overall_length];
     Double doub = new Double(0);
     int current = 0;
     resultTypes[current++] = doub;
@@ -507,7 +547,7 @@ public class ClassifierSplitEvaluator
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
-    
+
     // Weighted IR stats
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
@@ -523,24 +563,26 @@ public class ClassifierSplitEvaluator
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
-    
+
     // sizes
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
 
     // ID/Targets/Predictions
-    if (getAttributeID() >= 0) resultTypes[current++] = "";
-    if (getPredTargetColumn()){
-        resultTypes[current++] = "";
-        resultTypes[current++] = "";
+    if (getAttributeID() >= 0) {
+      resultTypes[current++] = "";
+    }
+    if (getPredTargetColumn()) {
+      resultTypes[current++] = "";
+      resultTypes[current++] = "";
     }
-    
+
     // Classifier defined extras
     resultTypes[current++] = "";
 
     // add any additional measures
-    for (int i=0;i<addm;i++) {
+    for (int i = 0; i < addm; i++) {
       resultTypes[current++] = doub;
     }
     if (current != overall_length) {
@@ -550,23 +592,27 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Gets the names of each of the result columns produced for a single run.
-   * The number of result fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the names of each of the result columns produced for a single run. The
+   * number of result fields must be constant for a given SplitEvaluator.
+   * 
    * @return an array containing the name of each result column
    */
-  public String [] getResultNames() {
-    int addm = (m_AdditionalMeasures != null) 
-      ? m_AdditionalMeasures.length 
+  @Override
+  public String[] getResultNames() {
+    int addm = (m_AdditionalMeasures != null)
+      ? m_AdditionalMeasures.length
       : 0;
-    int overall_length = RESULT_SIZE+addm;
+    int overall_length = RESULT_SIZE + addm;
     overall_length += NUM_IR_STATISTICS;
     overall_length += NUM_WEIGHTED_IR_STATISTICS;
-    if (getAttributeID() >= 0) overall_length += 1;
-    if (getPredTargetColumn()) overall_length += 2;
+    if (getAttributeID() >= 0) {
+      overall_length += 1;
+    }
+    if (getPredTargetColumn()) {
+      overall_length += 2;
+    }
 
-    String [] resultNames = new String[overall_length];
+    String[] resultNames = new String[overall_length];
     int current = 0;
     resultNames[current++] = "Number_of_training_instances";
     resultNames[current++] = "Number_of_testing_instances";
@@ -612,7 +658,7 @@ public class ClassifierSplitEvaluator
     resultNames[current++] = "IR_recall";
     resultNames[current++] = "F_measure";
     resultNames[current++] = "Area_under_ROC";
-    
+
     // Weighted IR stats
     resultNames[current++] = "Weighted_avg_true_positive_rate";
     resultNames[current++] = "Weighted_avg_false_positive_rate";
@@ -622,7 +668,7 @@ public class ClassifierSplitEvaluator
     resultNames[current++] = "Weighted_avg_IR_recall";
     resultNames[current++] = "Weighted_avg_F_measure";
     resultNames[current++] = "Weighted_avg_area_under_ROC";
-    
+
     // Timing stats
     resultNames[current++] = "Elapsed_Time_training";
     resultNames[current++] = "Elapsed_Time_testing";
@@ -633,18 +679,20 @@ public class ClassifierSplitEvaluator
     resultNames[current++] = "Serialized_Model_Size";
     resultNames[current++] = "Serialized_Train_Set_Size";
     resultNames[current++] = "Serialized_Test_Set_Size";
-    
+
     // ID/Targets/Predictions
-    if (getAttributeID() >= 0) resultNames[current++] = "Instance_ID";
-    if (getPredTargetColumn()){
-        resultNames[current++] = "Targets";
-        resultNames[current++] = "Predictions";
+    if (getAttributeID() >= 0) {
+      resultNames[current++] = "Instance_ID";
+    }
+    if (getPredTargetColumn()) {
+      resultNames[current++] = "Targets";
+      resultNames[current++] = "Predictions";
     }
-    
+
     // Classifier defined extras
     resultNames[current++] = "Summary";
     // add any additional measures
-    for (int i=0;i<addm;i++) {
+    for (int i = 0; i < addm; i++) {
       resultNames[current++] = m_AdditionalMeasures[i];
     }
     if (current != overall_length) {
@@ -654,19 +702,20 @@ public class ClassifierSplitEvaluator
   }
 
   /**
-   * Gets the results for the supplied train and test datasets. Now performs
-   * a deep copy of the classifier before it is built and evaluated (just in case
+   * Gets the results for the supplied train and test datasets. Now performs a
+   * deep copy of the classifier before it is built and evaluated (just in case
    * the classifier is not initialized properly in buildClassifier()).
-   *
+   * 
    * @param train the training Instances.
    * @param test the testing Instances.
-   * @return the results stored in an array. The objects stored in
-   * the array may be Strings, Doubles, or null (for the missing value).
+   * @return the results stored in an array. The objects stored in the array may
+   *         be Strings, Doubles, or null (for the missing value).
    * @throws Exception if a problem occurs while getting the results
    */
-  public Object [] getResult(Instances train, Instances test)
-  throws Exception {
-    
+  @Override
+  public Object[] getResult(Instances train, Instances test)
+    throws Exception {
+
     if (train.classAttribute().type() != Attribute.NOMINAL) {
       throw new Exception("Class attribute is not nominal!");
     }
@@ -674,44 +723,52 @@ public class ClassifierSplitEvaluator
       throw new Exception("No classifier has been specified");
     }
     int addm = (m_AdditionalMeasures != null) ? m_AdditionalMeasures.length : 0;
-    int overall_length = RESULT_SIZE+addm;
+    int overall_length = RESULT_SIZE + addm;
     overall_length += NUM_IR_STATISTICS;
     overall_length += NUM_WEIGHTED_IR_STATISTICS;
-    if (getAttributeID() >= 0) overall_length += 1;
-    if (getPredTargetColumn()) overall_length += 2;
-    
+    if (getAttributeID() >= 0) {
+      overall_length += 1;
+    }
+    if (getPredTargetColumn()) {
+      overall_length += 2;
+    }
+
     ThreadMXBean thMonitor = ManagementFactory.getThreadMXBean();
     boolean canMeasureCPUTime = thMonitor.isThreadCpuTimeSupported();
-    if(canMeasureCPUTime && !thMonitor.isThreadCpuTimeEnabled())
+    if (canMeasureCPUTime && !thMonitor.isThreadCpuTimeEnabled()) {
       thMonitor.setThreadCpuTimeEnabled(true);
-    
-    Object [] result = new Object[overall_length];
+    }
+
+    Object[] result = new Object[overall_length];
     Evaluation eval = new Evaluation(train);
     m_Classifier = Classifier.makeCopy(m_Template);
-    double [] predictions;
+    double[] predictions;
     long thID = Thread.currentThread().getId();
-    long CPUStartTime=-1, trainCPUTimeElapsed=-1, testCPUTimeElapsed=-1,
-         trainTimeStart, trainTimeElapsed, testTimeStart, testTimeElapsed;    
+    long CPUStartTime = -1, trainCPUTimeElapsed = -1, testCPUTimeElapsed = -1, trainTimeStart, trainTimeElapsed, testTimeStart, testTimeElapsed;
 
-    //training classifier
+    // training classifier
     trainTimeStart = System.currentTimeMillis();
-    if(canMeasureCPUTime)
+    if (canMeasureCPUTime) {
       CPUStartTime = thMonitor.getThreadUserTime(thID);
-    m_Classifier.buildClassifier(train);    
-    if(canMeasureCPUTime)
+    }
+    m_Classifier.buildClassifier(train);
+    if (canMeasureCPUTime) {
       trainCPUTimeElapsed = thMonitor.getThreadUserTime(thID) - CPUStartTime;
+    }
     trainTimeElapsed = System.currentTimeMillis() - trainTimeStart;
-    
-    //testing classifier
+
+    // testing classifier
     testTimeStart = System.currentTimeMillis();
-    if(canMeasureCPUTime) 
+    if (canMeasureCPUTime) {
       CPUStartTime = thMonitor.getThreadUserTime(thID);
+    }
     predictions = eval.evaluateModel(m_Classifier, test);
-    if(canMeasureCPUTime)
+    if (canMeasureCPUTime) {
       testCPUTimeElapsed = thMonitor.getThreadUserTime(thID) - CPUStartTime;
+    }
     testTimeElapsed = System.currentTimeMillis() - testTimeStart;
     thMonitor = null;
-    
+
     m_result = eval.toSummaryString();
     // The results stored are all per instance -- can be multiplied by the
     // number of instances to get absolute numbers
@@ -725,24 +782,24 @@ public class ClassifierSplitEvaluator
     result[current++] = new Double(eval.pctIncorrect());
     result[current++] = new Double(eval.pctUnclassified());
     result[current++] = new Double(eval.kappa());
-    
+
     result[current++] = new Double(eval.meanAbsoluteError());
     result[current++] = new Double(eval.rootMeanSquaredError());
     result[current++] = new Double(eval.relativeAbsoluteError());
     result[current++] = new Double(eval.rootRelativeSquaredError());
-    
+
     result[current++] = new Double(eval.SFPriorEntropy());
     result[current++] = new Double(eval.SFSchemeEntropy());
     result[current++] = new Double(eval.SFEntropyGain());
     result[current++] = new Double(eval.SFMeanPriorEntropy());
     result[current++] = new Double(eval.SFMeanSchemeEntropy());
     result[current++] = new Double(eval.SFMeanEntropyGain());
-    
+
     // K&B stats
     result[current++] = new Double(eval.KBInformation());
     result[current++] = new Double(eval.KBMeanInformation());
     result[current++] = new Double(eval.KBRelativeInformation());
-    
+
     // IR stats
     result[current++] = new Double(eval.truePositiveRate(m_IRclass));
     result[current++] = new Double(eval.numTruePositives(m_IRclass));
@@ -756,7 +813,7 @@ public class ClassifierSplitEvaluator
     result[current++] = new Double(eval.recall(m_IRclass));
     result[current++] = new Double(eval.fMeasure(m_IRclass));
     result[current++] = new Double(eval.areaUnderROC(m_IRclass));
-    
+
     // Weighted IR stats
     result[current++] = new Double(eval.weightedTruePositiveRate());
     result[current++] = new Double(eval.weightedFalsePositiveRate());
@@ -766,13 +823,14 @@ public class ClassifierSplitEvaluator
     result[current++] = new Double(eval.weightedRecall());
     result[current++] = new Double(eval.weightedFMeasure());
     result[current++] = new Double(eval.weightedAreaUnderROC());
-    
+
     // Timing stats
     result[current++] = new Double(trainTimeElapsed / 1000.0);
     result[current++] = new Double(testTimeElapsed / 1000.0);
-    if(canMeasureCPUTime) {
-      result[current++] = new Double((trainCPUTimeElapsed/1000000.0) / 1000.0);
-      result[current++] = new Double((testCPUTimeElapsed /1000000.0) / 1000.0);
+    if (canMeasureCPUTime) {
+      result[current++] =
+        new Double((trainCPUTimeElapsed / 1000000.0) / 1000.0);
+      result[current++] = new Double((testCPUTimeElapsed / 1000000.0) / 1000.0);
     }
     else {
       result[current++] = new Double(Instance.missingValue());
@@ -792,81 +850,86 @@ public class ClassifierSplitEvaluator
     oostream = new ObjectOutputStream(bastream);
     oostream.writeObject(test);
     result[current++] = new Double(bastream.size());
-    
+
     // IDs
-    if (getAttributeID() >= 0){
+    if (getAttributeID() >= 0) {
       String idsString = "";
-      if (test.attribute(m_attID).isNumeric()){
-        if (test.numInstances() > 0)
+      if (test.attribute(m_attID).isNumeric()) {
+        if (test.numInstances() > 0) {
           idsString += test.instance(0).value(m_attID);
-        for(int i=1;i<test.numInstances();i++){
+        }
+        for (int i = 1; i < test.numInstances(); i++) {
           idsString += "|" + test.instance(i).value(m_attID);
         }
       } else {
-        if (test.numInstances() > 0)
+        if (test.numInstances() > 0) {
           idsString += test.instance(0).stringValue(m_attID);
-        for(int i=1;i<test.numInstances();i++){
+        }
+        for (int i = 1; i < test.numInstances(); i++) {
           idsString += "|" + test.instance(i).stringValue(m_attID);
         }
       }
       result[current++] = idsString;
     }
-    
-    if (getPredTargetColumn()){
-      if (test.classAttribute().isNumeric()){
+
+    if (getPredTargetColumn()) {
+      if (test.classAttribute().isNumeric()) {
         // Targets
-        if (test.numInstances() > 0){
+        if (test.numInstances() > 0) {
           String targetsString = "";
           targetsString += test.instance(0).value(test.classIndex());
-          for(int i=1;i<test.numInstances();i++){
+          for (int i = 1; i < test.numInstances(); i++) {
             targetsString += "|" + test.instance(i).value(test.classIndex());
           }
           result[current++] = targetsString;
         }
-        
+
         // Predictions
-        if (predictions.length > 0){
+        if (predictions.length > 0) {
           String predictionsString = "";
           predictionsString += predictions[0];
-          for(int i=1;i<predictions.length;i++){
+          for (int i = 1; i < predictions.length; i++) {
             predictionsString += "|" + predictions[i];
           }
           result[current++] = predictionsString;
         }
       } else {
         // Targets
-        if (test.numInstances() > 0){
+        if (test.numInstances() > 0) {
           String targetsString = "";
           targetsString += test.instance(0).stringValue(test.classIndex());
-          for(int i=1;i<test.numInstances();i++){
-            targetsString += "|" + test.instance(i).stringValue(test.classIndex());
+          for (int i = 1; i < test.numInstances(); i++) {
+            targetsString +=
+              "|" + test.instance(i).stringValue(test.classIndex());
           }
           result[current++] = targetsString;
         }
-        
+
         // Predictions
-        if (predictions.length > 0){
+        if (predictions.length > 0) {
           String predictionsString = "";
-          predictionsString += test.classAttribute().value((int) predictions[0]);
-          for(int i=1;i<predictions.length;i++){
-            predictionsString += "|" + test.classAttribute().value((int) predictions[i]);
+          predictionsString +=
+            test.classAttribute().value((int) predictions[0]);
+          for (int i = 1; i < predictions.length; i++) {
+            predictionsString +=
+              "|" + test.classAttribute().value((int) predictions[i]);
           }
           result[current++] = predictionsString;
         }
       }
     }
-    
+
     if (m_Classifier instanceof Summarizable) {
-      result[current++] = ((Summarizable)m_Classifier).toSummaryString();
+      result[current++] = ((Summarizable) m_Classifier).toSummaryString();
     } else {
       result[current++] = null;
     }
-    
-    for (int i=0;i<addm;i++) {
+
+    for (int i = 0; i < addm; i++) {
       if (m_doesProduce[i]) {
         try {
-          double dv = ((AdditionalMeasureProducer)m_Classifier).
-          getMeasure(m_AdditionalMeasures[i]);
+          double dv = ((AdditionalMeasureProducer) m_Classifier).
+            getMeasure(m_AdditionalMeasures[i]);
           if (!Instance.isMissingValue(dv)) {
             Double value = new Double(dv);
             result[current++] = value;
@@ -880,7 +943,7 @@ public class ClassifierSplitEvaluator
         result[current++] = null;
       }
     }
-    
+
     if (current != overall_length) {
       throw new Error("Results didn't fit RESULT_SIZE");
     }
@@ -889,8 +952,9 @@ public class ClassifierSplitEvaluator
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String classifierTipText() {
     return "The classifier to use.";
@@ -898,36 +962,38 @@ public class ClassifierSplitEvaluator
 
   /**
    * Get the value of Classifier.
-   *
+   * 
    * @return Value of Classifier.
    */
   public Classifier getClassifier() {
-    
+
     return m_Template;
   }
-  
+
   /**
    * Sets the classifier.
-   *
+   * 
    * @param newClassifier the new classifier to use.
    */
   public void setClassifier(Classifier newClassifier) {
-    
+
     m_Template = newClassifier;
     updateOptions();
   }
-  
+
   /**
    * Get the value of ClassForIRStatistics.
+   * 
    * @return Value of ClassForIRStatistics.
    */
   public int getClassForIRStatistics() {
     return m_IRclass;
   }
-  
+
   /**
    * Set the value of ClassForIRStatistics.
-   * @param v  Value to assign to ClassForIRStatistics.
+   * 
+   * @param v Value to assign to ClassForIRStatistics.
    */
   public void setClassForIRStatistics(int v) {
     m_IRclass = v;
@@ -935,49 +1001,52 @@ public class ClassifierSplitEvaluator
 
   /**
    * Get the index of Attibute Identifying the instances
+   * 
    * @return index of outputed Attribute.
    */
   public int getAttributeID() {
     return m_attID;
   }
-  
+
   /**
    * Set the index of Attibute Identifying the instances
+   * 
    * @param v index the attribute to output
    */
   public void setAttributeID(int v) {
     m_attID = v;
   }
-    
+
   /**
-   *@return true if the prediction and target columns must be outputed.
+   * @return true if the prediction and target columns must be outputed.
    */
-  public boolean getPredTargetColumn(){
-      return m_predTargetColumn;
+  public boolean getPredTargetColumn() {
+    return m_predTargetColumn;
   }
 
   /**
    * Set the flag for prediction and target output.
-   *@param v true if the 2 columns have to be outputed. false otherwise.
+   * 
+   * @param v true if the 2 columns have to be outputed. false otherwise.
    */
-  public void setPredTargetColumn(boolean v){
-      m_predTargetColumn = v;
+  public void setPredTargetColumn(boolean v) {
+    m_predTargetColumn = v;
   }
-  
+
   /**
    * Updates the options that the current classifier is using.
    */
   protected void updateOptions() {
-    
+
     if (m_Template instanceof OptionHandler) {
-      m_ClassifierOptions = Utils.joinOptions(((OptionHandler)m_Template)
-					      .getOptions());
+      m_ClassifierOptions = Utils.joinOptions(((OptionHandler) m_Template)
+        .getOptions());
     } else {
       m_ClassifierOptions = "";
     }
     if (m_Template instanceof Serializable) {
       ObjectStreamClass obs = ObjectStreamClass.lookup(m_Template
-						       .getClass());
+        .getClass());
       m_ClassifierVersion = "" + obs.getSerialVersionUID();
     } else {
       m_ClassifierVersion = "";
@@ -987,25 +1056,27 @@ public class ClassifierSplitEvaluator
   /**
    * Set the Classifier to use, given it's class name. A new classifier will be
    * instantiated.
-   *
+   * 
    * @param newClassifierName the Classifier class name.
    * @throws Exception if the class name is invalid.
    */
   public void setClassifierName(String newClassifierName) throws Exception {
 
     try {
-      setClassifier((Classifier)Class.forName(newClassifierName)
-		    .newInstance());
+      setClassifier((Classifier) Class.forName(newClassifierName)
+        .newInstance());
     } catch (Exception ex) {
       throw new Exception("Can't find Classifier with class name: "
-			  + newClassifierName);
+        + newClassifierName);
     }
   }
 
   /**
    * Gets the raw output from the classifier
+   * 
    * @return the raw output from th,0e classifier
    */
+  @Override
   public String getRawResultOutput() {
     StringBuffer result = new StringBuffer();
 
@@ -1013,29 +1084,29 @@ public class ClassifierSplitEvaluator
       return "<null> classifier";
     }
     result.append(toString());
-    result.append("Classifier model: \n"+m_Classifier.toString()+'\n');
+    result.append("Classifier model: \n" + m_Classifier.toString() + '\n');
 
     // append the performance statistics
     if (m_result != null) {
       result.append(m_result);
-      
+
       if (m_doesProduce != null) {
-	for (int i=0;i<m_doesProduce.length;i++) {
-	  if (m_doesProduce[i]) {
-	    try {
-	      double dv = ((AdditionalMeasureProducer)m_Classifier).
-		getMeasure(m_AdditionalMeasures[i]);
-	      if (!Instance.isMissingValue(dv)) {
-		Double value = new Double(dv);
-		result.append(m_AdditionalMeasures[i]+" : "+value+'\n');
-	      } else {
-		result.append(m_AdditionalMeasures[i]+" : "+'?'+'\n');
-	      }
-	    } catch (Exception ex) {
-	      System.err.println(ex);
-	    }
-	  } 
-	}
+        for (int i = 0; i < m_doesProduce.length; i++) {
+          if (m_doesProduce[i]) {
+            try {
+              double dv = ((AdditionalMeasureProducer) m_Classifier).
+                getMeasure(m_AdditionalMeasures[i]);
+              if (!Instance.isMissingValue(dv)) {
+                Double value = new Double(dv);
+                result.append(m_AdditionalMeasures[i] + " : " + value + '\n');
+              } else {
+                result.append(m_AdditionalMeasures[i] + " : " + '?' + '\n');
+              }
+            } catch (Exception ex) {
+              System.err.println(ex);
+            }
+          }
+        }
       }
     }
     return result.toString();
@@ -1043,25 +1114,27 @@ public class ClassifierSplitEvaluator
 
   /**
    * Returns a text description of the split evaluator.
-   *
+   * 
    * @return a text description of the split evaluator.
    */
+  @Override
   public String toString() {
 
     String result = "ClassifierSplitEvaluator: ";
     if (m_Template == null) {
       return result + "<null> classifier";
     }
-    return result + m_Template.getClass().getName() + " " 
+    return result + m_Template.getClass().getName() + " "
       + m_ClassifierOptions + "(version " + m_ClassifierVersion + ")";
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 7513 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // ClassifierSplitEvaluator
diff --git a/src/main/java/weka/experiment/CrossValidationResultProducer.java b/src/main/java/weka/experiment/CrossValidationResultProducer.java
index 41ff4d1..ca34072 100644
--- a/src/main/java/weka/experiment/CrossValidationResultProducer.java
+++ b/src/main/java/weka/experiment/CrossValidationResultProducer.java
@@ -20,17 +20,8 @@
  *
  */
 
-
 package weka.experiment;
 
-import weka.core.AdditionalMeasureProducer;
-import weka.core.Instances;
-import weka.core.Option;
-import weka.core.OptionHandler;
-import weka.core.RevisionHandler;
-import weka.core.RevisionUtils;
-import weka.core.Utils;
-
 import java.io.File;
 import java.util.Calendar;
 import java.util.Enumeration;
@@ -38,78 +29,106 @@ import java.util.Random;
 import java.util.TimeZone;
 import java.util.Vector;
 
+import weka.core.AdditionalMeasureProducer;
+import weka.core.Instances;
+import weka.core.Option;
+import weka.core.OptionHandler;
+import weka.core.RevisionHandler;
+import weka.core.RevisionUtils;
+import weka.core.Utils;
 
 /**
- <!-- globalinfo-start -->
- * Generates for each run, carries out an n-fold cross-validation, using the set SplitEvaluator to generate some results. If the class attribute is nominal, the dataset is stratified. Results for each fold are generated, so you may wish to use this in addition with an AveragingResultProducer to obtain averages for each run.
+ * <!-- globalinfo-start --> Generates for each run, carries out an n-fold
+ * cross-validation, using the set SplitEvaluator to generate some results. If
+ * the class attribute is nominal, the dataset is stratified. Results for each
+ * fold are generated, so you may wish to use this in addition with an
+ * AveragingResultProducer to obtain averages for each run.
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- globalinfo-end -->
  * 
- * <pre> -X <number of folds>
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -X <number of folds>
  *  The number of folds to use for the cross-validation.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -D
- * Save raw split evaluator output.</pre>
+ * <pre>
+ * -D
+ * Save raw split evaluator output.
+ * </pre>
  * 
- * <pre> -O <file/directory name/path>
+ * <pre>
+ * -O <file/directory name/path>
  *  The filename where raw output will be stored.
  *  If a directory name is specified then then individual
  *  outputs will be gzipped, otherwise all output will be
- *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+ *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a SplitEvaluator.
- *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+ *  eg: weka.experiment.ClassifierSplitEvaluator
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
  * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
  * 
- <!-- options-end -->
+ * <!-- options-end -->
  * 
  * All options after -- will be passed to the split evaluator.
- *
+ * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
  * @version $Revision: 1.17 $
  */
-public class CrossValidationResultProducer 
-  implements ResultProducer, OptionHandler, AdditionalMeasureProducer, 
-             RevisionHandler {
-  
+public class CrossValidationResultProducer
+  implements ResultProducer, OptionHandler, AdditionalMeasureProducer,
+  RevisionHandler {
+
   /** for serialization */
   static final long serialVersionUID = -1580053925080091917L;
-  
+
   /** The dataset of interest */
   protected Instances m_Instances;
 
@@ -127,14 +146,14 @@ public class CrossValidationResultProducer
 
   /** The destination output file/directory for raw output */
   protected File m_OutputFile = new File(
-				new File(System.getProperty("user.dir")), 
-				"splitEvalutorOut.zip");
+    new File(System.getProperty("user.dir")),
+    "splitEvalutorOut.zip");
 
   /** The SplitEvaluator used to generate results */
   protected SplitEvaluator m_SplitEvaluator = new ClassifierSplitEvaluator();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
+  protected String[] m_AdditionalMeasures = null;
 
   /** The name of the key field containing the dataset name */
   public static String DATASET_FIELD_NAME = "Dataset";
@@ -150,12 +169,13 @@ public class CrossValidationResultProducer
 
   /**
    * Returns a string describing this result producer
-   * @return a description of the result producer suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the result producer suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
-    return 
-        "Generates for each run, carries out an n-fold cross-validation, "
+    return
+    "Generates for each run, carries out an n-fold cross-validation, "
       + "using the set SplitEvaluator to generate some results. If the class "
       + "attribute is nominal, the dataset is stratified. Results for each fold "
       + "are generated, so you may wish to use this in addition with an "
@@ -164,82 +184,90 @@ public class CrossValidationResultProducer
 
   /**
    * Sets the dataset that results will be obtained for.
-   *
+   * 
    * @param instances a value of type 'Instances'.
    */
+  @Override
   public void setInstances(Instances instances) {
-    
+
     m_Instances = instances;
   }
 
   /**
    * Sets the object to send results of each run to.
-   *
+   * 
    * @param listener a value of type 'ResultListener'
    */
+  @Override
   public void setResultListener(ResultListener listener) {
 
     m_ResultListener = listener;
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in SplitEvaluators. This could contain many measures (of which only a
-   * subset may be produceable by the current SplitEvaluator) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * SplitEvaluators. This could contain many measures (of which only a subset
+   * may be produceable by the current SplitEvaluator) if an experiment is the
+   * type that iterates over a set of properties.
+   * 
    * @param additionalMeasures an array of measure names, null if none
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     m_AdditionalMeasures = additionalMeasures;
 
     if (m_SplitEvaluator != null) {
       System.err.println("CrossValidationResultProducer: setting additional "
-			 +"measures for "
-			 +"split evaluator");
+        + "measures for "
+        + "split evaluator");
       m_SplitEvaluator.setAdditionalMeasures(m_AdditionalMeasures);
     }
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the SplitEvaluator
+   * Returns an enumeration of any additional measure names that might be in the
+   * SplitEvaluator
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_SplitEvaluator instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_SplitEvaluator).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_SplitEvaluator).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
   }
-  
+
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_SplitEvaluator instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_SplitEvaluator).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_SplitEvaluator).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("CrossValidationResultProducer: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_SplitEvaluator.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_SplitEvaluator.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
-  
+
   /**
-   * Gets a Double representing the current date and time.
-   * eg: 1:46pm on 20/5/1999 -> 19990520.1346
-   *
+   * Gets a Double representing the current date and time. eg: 1:46pm on
+   * 20/5/1999 -> 19990520.1346
+   * 
    * @return a value of type Double
    */
   public static Double getTimestamp() {
@@ -252,12 +280,13 @@ public class CrossValidationResultProducer
       + now.get(Calendar.MINUTE) / 10000.0;
     return new Double(timestamp);
   }
-  
+
   /**
    * Prepare to generate results.
-   *
+   * 
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess() throws Exception {
 
     if (m_SplitEvaluator == null) {
@@ -268,77 +297,79 @@ public class CrossValidationResultProducer
     }
     m_ResultListener.preProcess(this);
   }
-  
+
   /**
-   * Perform any postprocessing. When this method is called, it indicates
-   * that no more requests to generate results for the current experiment
-   * will be sent.
-   *
+   * Perform any postprocessing. When this method is called, it indicates that
+   * no more requests to generate results for the current experiment will be
+   * sent.
+   * 
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess() throws Exception {
 
     m_ResultListener.postProcess(this);
 
     if (m_debugOutput) {
       if (m_ZipDest != null) {
-	m_ZipDest.finished();
-	m_ZipDest = null;
+        m_ZipDest.finished();
+        m_ZipDest = null;
       }
     }
   }
-  
+
   /**
-   * Gets the keys for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Keys
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the keys for a specified run number. Different run numbers correspond
+   * to different randomizations of the data. Keys produced should be sent to
+   * the current ResultListener
+   * 
    * @param run the run number to get keys for.
    * @throws Exception if a problem occurs while getting the keys
    */
+  @Override
   public void doRunKeys(int run) throws Exception {
     if (m_Instances == null) {
       throw new Exception("No Instances set");
     }
-    /*    // Randomize on a copy of the original dataset
-    Instances runInstances = new Instances(m_Instances);
-    runInstances.randomize(new Random(run));
-    if (runInstances.classAttribute().isNominal()) {
-      runInstances.stratify(m_NumFolds);
-      } */
+    /*
+     * // Randomize on a copy of the original dataset Instances runInstances =
+     * new Instances(m_Instances); runInstances.randomize(new Random(run)); if
+     * (runInstances.classAttribute().isNominal()) {
+     * runInstances.stratify(m_NumFolds); }
+     */
     for (int fold = 0; fold < m_NumFolds; fold++) {
       // Add in some fields to the key like run and fold number, dataset name
-      Object [] seKey = m_SplitEvaluator.getKey();
-      Object [] key = new Object [seKey.length + 3];
+      Object[] seKey = m_SplitEvaluator.getKey();
+      Object[] key = new Object[seKey.length + 3];
       key[0] = Utils.backQuoteChars(m_Instances.relationName());
       key[1] = "" + run;
       key[2] = "" + (fold + 1);
       System.arraycopy(seKey, 0, key, 3, seKey.length);
       if (m_ResultListener.isResultRequired(this, key)) {
-	try {
-	  m_ResultListener.acceptResult(this, key, null);
-	} catch (Exception ex) {
-	  // Save the train and test datasets for debugging purposes?
-	  throw ex;
-	}
+        try {
+          m_ResultListener.acceptResult(this, key, null);
+        } catch (Exception ex) {
+          // Save the train and test datasets for debugging purposes?
+          throw ex;
+        }
       }
     }
   }
 
-
   /**
-   * Gets the results for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Results
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the results for a specified run number. Different run numbers
+   * correspond to different randomizations of the data. Results produced should
+   * be sent to the current ResultListener
+   * 
    * @param run the run number to get results for.
    * @throws Exception if a problem occurs while getting the results
    */
+  @Override
   public void doRun(int run) throws Exception {
 
     if (getRawOutput()) {
       if (m_ZipDest == null) {
-	m_ZipDest = new OutputZipper(m_OutputFile);
+        m_ZipDest = new OutputZipper(m_OutputFile);
       }
     }
 
@@ -354,54 +385,55 @@ public class CrossValidationResultProducer
     }
     for (int fold = 0; fold < m_NumFolds; fold++) {
       // Add in some fields to the key like run and fold number, dataset name
-      Object [] seKey = m_SplitEvaluator.getKey();
-      Object [] key = new Object [seKey.length + 3];
-      key[0] =  Utils.backQuoteChars(m_Instances.relationName());
+      Object[] seKey = m_SplitEvaluator.getKey();
+      Object[] key = new Object[seKey.length + 3];
+      key[0] = Utils.backQuoteChars(m_Instances.relationName());
       key[1] = "" + run;
       key[2] = "" + (fold + 1);
       System.arraycopy(seKey, 0, key, 3, seKey.length);
       if (m_ResultListener.isResultRequired(this, key)) {
-	Instances train = runInstances.trainCV(m_NumFolds, fold, random);
-	Instances test = runInstances.testCV(m_NumFolds, fold);
-	try {
-	  Object [] seResults = m_SplitEvaluator.getResult(train, test);
-	  Object [] results = new Object [seResults.length + 1];
-	  results[0] = getTimestamp();
-	  System.arraycopy(seResults, 0, results, 1,
-			   seResults.length);
-	  if (m_debugOutput) {
-	    String resultName = (""+run+"."+(fold+1)+"."
-	      + Utils.backQuoteChars(runInstances.relationName())
-	      +"."
-	      +m_SplitEvaluator.toString()).replace(' ','_');
-	    resultName = Utils.removeSubstring(resultName, 
-					       "weka.classifiers.");
-	    resultName = Utils.removeSubstring(resultName, 
-					       "weka.filters.");
-	    resultName = Utils.removeSubstring(resultName, 
-					       "weka.attributeSelection.");
-	    m_ZipDest.zipit(m_SplitEvaluator.getRawResultOutput(), resultName);
-	  }
-	  m_ResultListener.acceptResult(this, key, results);
-	} catch (Exception ex) {
-	  // Save the train and test datasets for debugging purposes?
-	  throw ex;
-	}
+        Instances train = runInstances.trainCV(m_NumFolds, fold, random);
+        Instances test = runInstances.testCV(m_NumFolds, fold);
+        try {
+          Object[] seResults = m_SplitEvaluator.getResult(train, test);
+          Object[] results = new Object[seResults.length + 1];
+          results[0] = getTimestamp();
+          System.arraycopy(seResults, 0, results, 1,
+            seResults.length);
+          if (m_debugOutput) {
+            String resultName = ("" + run + "." + (fold + 1) + "."
+              + Utils.backQuoteChars(runInstances.relationName())
+              + "."
+              + m_SplitEvaluator.toString()).replace(' ', '_');
+            resultName = Utils.removeSubstring(resultName,
+              "weka.classifiers.");
+            resultName = Utils.removeSubstring(resultName,
+              "weka.filters.");
+            resultName = Utils.removeSubstring(resultName,
+              "weka.attributeSelection.");
+            m_ZipDest.zipit(m_SplitEvaluator.getRawResultOutput(), resultName);
+          }
+          m_ResultListener.acceptResult(this, key, results);
+        } catch (Exception ex) {
+          // Save the train and test datasets for debugging purposes?
+          throw ex;
+        }
       }
     }
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * This method should really be static.
-   *
+   * Gets the names of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
    * @return an array containing the name of each column
    */
-  public String [] getKeyNames() {
+  @Override
+  public String[] getKeyNames() {
 
-    String [] keyNames = m_SplitEvaluator.getKeyNames();
+    String[] keyNames = m_SplitEvaluator.getKeyNames();
     // Add in the names of our extra key fields
-    String [] newKeyNames = new String [keyNames.length + 3];
+    String[] newKeyNames = new String[keyNames.length + 3];
     newKeyNames[0] = DATASET_FIELD_NAME;
     newKeyNames[1] = RUN_FIELD_NAME;
     newKeyNames[2] = FOLD_FIELD_NAME;
@@ -410,17 +442,18 @@ public class CrossValidationResultProducer
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    */
-  public Object [] getKeyTypes() {
+  @Override
+  public Object[] getKeyTypes() {
 
-    Object [] keyTypes = m_SplitEvaluator.getKeyTypes();
+    Object[] keyTypes = m_SplitEvaluator.getKeyTypes();
     // Add in the types of our extra fields
-    Object [] newKeyTypes = new String [keyTypes.length + 3];
+    Object[] newKeyTypes = new String[keyTypes.length + 3];
     newKeyTypes[0] = new String();
     newKeyTypes[1] = new String();
     newKeyTypes[2] = new String();
@@ -429,55 +462,57 @@ public class CrossValidationResultProducer
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * This method should really be static.
-   *
+   * Gets the names of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
    * @return an array containing the name of each column
    */
-  public String [] getResultNames() {
+  @Override
+  public String[] getResultNames() {
 
-    String [] resultNames = m_SplitEvaluator.getResultNames();
+    String[] resultNames = m_SplitEvaluator.getResultNames();
     // Add in the names of our extra Result fields
-    String [] newResultNames = new String [resultNames.length + 1];
+    String[] newResultNames = new String[resultNames.length + 1];
     newResultNames[0] = TIMESTAMP_FIELD_NAME;
     System.arraycopy(resultNames, 0, newResultNames, 1, resultNames.length);
     return newResultNames;
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    */
-  public Object [] getResultTypes() {
+  @Override
+  public Object[] getResultTypes() {
 
-    Object [] resultTypes = m_SplitEvaluator.getResultTypes();
+    Object[] resultTypes = m_SplitEvaluator.getResultTypes();
     // Add in the types of our extra Result fields
-    Object [] newResultTypes = new Object [resultTypes.length + 1];
+    Object[] newResultTypes = new Object[resultTypes.length + 1];
     newResultTypes[0] = new Double(0);
     System.arraycopy(resultTypes, 0, newResultTypes, 1, resultTypes.length);
     return newResultTypes;
   }
 
   /**
-   * Gets a description of the internal settings of the result
-   * producer, sufficient for distinguishing a ResultProducer
-   * instance from another with different settings (ignoring
-   * those settings set through this interface). For example,
-   * a cross-validation ResultProducer may have a setting for the
-   * number of folds. For a given state, the results produced should
-   * be compatible. Typically if a ResultProducer is an OptionHandler,
-   * this string will represent the command line arguments required
-   * to set the ResultProducer to that state.
-   *
-   * @return the description of the ResultProducer state, or null
-   * if no state is defined
+   * Gets a description of the internal settings of the result producer,
+   * sufficient for distinguishing a ResultProducer instance from another with
+   * different settings (ignoring those settings set through this interface).
+   * For example, a cross-validation ResultProducer may have a setting for the
+   * number of folds. For a given state, the results produced should be
+   * compatible. Typically if a ResultProducer is an OptionHandler, this string
+   * will represent the command line arguments required to set the
+   * ResultProducer to that state.
+   * 
+   * @return the description of the ResultProducer state, or null if no state is
+   *         defined
    */
+  @Override
   public String getCompatibilityState() {
 
-    String result = "-X " + m_NumFolds + " " ;
+    String result = "-X " + m_NumFolds + " ";
     if (m_SplitEvaluator == null) {
       result += "<null SplitEvaluator>";
     } else {
@@ -488,42 +523,44 @@ public class CrossValidationResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String outputFileTipText() {
     return "Set the destination for saving raw output. If the rawOutput "
-      +"option is selected, then output from the splitEvaluator for "
-      +"individual folds is saved. If the destination is a directory, "
-      +"then each output is saved to an individual gzip file; if the "
-      +"destination is a file, then each output is saved as an entry "
-      +"in a zip file.";
+      + "option is selected, then output from the splitEvaluator for "
+      + "individual folds is saved. If the destination is a directory, "
+      + "then each output is saved to an individual gzip file; if the "
+      + "destination is a file, then each output is saved as an entry "
+      + "in a zip file.";
   }
 
   /**
    * Get the value of OutputFile.
-   *
+   * 
    * @return Value of OutputFile.
    */
   public File getOutputFile() {
-    
+
     return m_OutputFile;
   }
-  
+
   /**
    * Set the value of OutputFile.
-   *
+   * 
    * @param newOutputFile Value to assign to OutputFile.
    */
   public void setOutputFile(File newOutputFile) {
-    
+
     m_OutputFile = newOutputFile;
-  }  
+  }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String numFoldsTipText() {
     return "Number of folds to use in cross validation.";
@@ -531,44 +568,47 @@ public class CrossValidationResultProducer
 
   /**
    * Get the value of NumFolds.
-   *
+   * 
    * @return Value of NumFolds.
    */
   public int getNumFolds() {
-    
+
     return m_NumFolds;
   }
-  
+
   /**
    * Set the value of NumFolds.
-   *
+   * 
    * @param newNumFolds Value to assign to NumFolds.
    */
   public void setNumFolds(int newNumFolds) {
-    
+
     m_NumFolds = newNumFolds;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String rawOutputTipText() {
     return "Save raw output (useful for debugging). If set, then output is "
-      +"sent to the destination specified by outputFile";
+      + "sent to the destination specified by outputFile";
   }
 
   /**
    * Get if raw split evaluator output is to be saved
+   * 
    * @return true if raw split evalutor output is to be saved
    */
   public boolean getRawOutput() {
     return m_debugOutput;
   }
-  
+
   /**
    * Set to true if raw split evaluator output is to be saved
+   * 
    * @param d true if output is to be saved
    */
   public void setRawOutput(boolean d) {
@@ -577,146 +617,168 @@ public class CrossValidationResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String splitEvaluatorTipText() {
     return "The evaluator to apply to the cross validation folds. "
-      +"This may be a classifier, regression scheme etc.";
+      + "This may be a classifier, regression scheme etc.";
   }
- 
+
   /**
    * Get the SplitEvaluator.
-   *
+   * 
    * @return the SplitEvaluator.
    */
   public SplitEvaluator getSplitEvaluator() {
-    
+
     return m_SplitEvaluator;
   }
-  
+
   /**
    * Set the SplitEvaluator.
-   *
+   * 
    * @param newSplitEvaluator new SplitEvaluator to use.
    */
   public void setSplitEvaluator(SplitEvaluator newSplitEvaluator) {
-    
+
     m_SplitEvaluator = newSplitEvaluator;
     m_SplitEvaluator.setAdditionalMeasures(m_AdditionalMeasures);
   }
 
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(4);
 
     newVector.addElement(new Option(
-	     "\tThe number of folds to use for the cross-validation.\n"
-	      +"\t(default 10)", 
-	     "X", 1, 
-	     "-X <number of folds>"));
+      "\tThe number of folds to use for the cross-validation.\n"
+        + "\t(default 10)",
+      "X", 1,
+      "-X <number of folds>"));
 
     newVector.addElement(new Option(
-	     "Save raw split evaluator output.",
-	     "D",0,"-D"));
+      "Save raw split evaluator output.",
+      "D", 0, "-D"));
 
     newVector.addElement(new Option(
-	     "\tThe filename where raw output will be stored.\n"
-	     +"\tIf a directory name is specified then then individual\n"
-	     +"\toutputs will be gzipped, otherwise all output will be\n"
-	     +"\tzipped to the named file. Use in conjuction with -D."
-	     +"\t(default splitEvalutorOut.zip)", 
-	     "O", 1, 
-	     "-O <file/directory name/path>"));
+      "\tThe filename where raw output will be stored.\n"
+        + "\tIf a directory name is specified then then individual\n"
+        + "\toutputs will be gzipped, otherwise all output will be\n"
+        + "\tzipped to the named file. Use in conjuction with -D."
+        + "\t(default splitEvalutorOut.zip)",
+      "O", 1,
+      "-O <file/directory name/path>"));
 
     newVector.addElement(new Option(
-	     "\tThe full class name of a SplitEvaluator.\n"
-	      +"\teg: weka.experiment.ClassifierSplitEvaluator", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of a SplitEvaluator.\n"
+        + "\teg: weka.experiment.ClassifierSplitEvaluator",
+      "W", 1,
+      "-W <class name>"));
 
     if ((m_SplitEvaluator != null) &&
-	(m_SplitEvaluator instanceof OptionHandler)) {
+      (m_SplitEvaluator instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to split evaluator "
-	     + m_SplitEvaluator.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_SplitEvaluator).listOptions();
+        "",
+        "", 0, "\nOptions specific to split evaluator "
+          + m_SplitEvaluator.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_SplitEvaluator).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
    * 
-   * <pre> -X <number of folds>
+   * <!-- options-start --> Valid options are:
+   * <p/>
+   * 
+   * <pre>
+   * -X <number of folds>
    *  The number of folds to use for the cross-validation.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -D
-   * Save raw split evaluator output.</pre>
+   * <pre>
+   * -D
+   * Save raw split evaluator output.
+   * </pre>
    * 
-   * <pre> -O <file/directory name/path>
+   * <pre>
+   * -O <file/directory name/path>
    *  The filename where raw output will be stored.
    *  If a directory name is specified then then individual
    *  outputs will be gzipped, otherwise all output will be
-   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a SplitEvaluator.
-   *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+   *  eg: weka.experiment.ClassifierSplitEvaluator
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
    * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All options after -- will be passed to the split evaluator.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     setRawOutput(Utils.getFlag('D', options));
 
     String fName = Utils.getOption('O', options);
@@ -732,56 +794,56 @@ public class CrossValidationResultProducer
     }
 
     String seName = Utils.getOption('W', options);
-    if (seName.length() == 0) {
-      throw new Exception("A SplitEvaluator must be specified with"
-			  + " the -W option.");
+    if (seName.length() > 0) {
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // SE.
+      setSplitEvaluator((SplitEvaluator) Utils.forName(
+        SplitEvaluator.class,
+        seName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // SE.
-    setSplitEvaluator((SplitEvaluator)Utils.forName(
-		      SplitEvaluator.class,
-		      seName,
-		      null));
     if (getSplitEvaluator() instanceof OptionHandler) {
       ((OptionHandler) getSplitEvaluator())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
     }
   }
 
   /**
    * Gets the current settings of the result producer.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] seOptions = new String [0];
-    if ((m_SplitEvaluator != null) && 
-	(m_SplitEvaluator instanceof OptionHandler)) {
-      seOptions = ((OptionHandler)m_SplitEvaluator).getOptions();
+    String[] seOptions = new String[0];
+    if ((m_SplitEvaluator != null) &&
+      (m_SplitEvaluator instanceof OptionHandler)) {
+      seOptions = ((OptionHandler) m_SplitEvaluator).getOptions();
     }
-    
-    String [] options = new String [seOptions.length + 8];
+
+    String[] options = new String[seOptions.length + 8];
     int current = 0;
 
-    options[current++] = "-X"; options[current++] = "" + getNumFolds();
+    options[current++] = "-X";
+    options[current++] = "" + getNumFolds();
 
     if (getRawOutput()) {
       options[current++] = "-D";
     }
 
-    options[current++] = "-O"; 
+    options[current++] = "-O";
     options[current++] = getOutputFile().getName();
-    
+
     if (getSplitEvaluator() != null) {
       options[current++] = "-W";
       options[current++] = getSplitEvaluator().getClass().getName();
     }
     options[current++] = "--";
 
-    System.arraycopy(seOptions, 0, options, current, 
-		     seOptions.length);
+    System.arraycopy(seOptions, 0, options, current,
+      seOptions.length);
     current += seOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -791,9 +853,10 @@ public class CrossValidationResultProducer
 
   /**
    * Gets a text descrption of the result producer.
-   *
+   * 
    * @return a text description of the result producer.
    */
+  @Override
   public String toString() {
 
     String result = "CrossValidationResultProducer: ";
@@ -801,27 +864,28 @@ public class CrossValidationResultProducer
     if (m_Instances == null) {
       result += ": <null Instances>";
     } else {
-      result += ": " +  Utils.backQuoteChars(m_Instances.relationName());
+      result += ": " + Utils.backQuoteChars(m_Instances.relationName());
     }
     return result;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
     return RevisionUtils.extract("$Revision: 1.17 $");
   }
-    
-  /** 
+
+  /**
    * Quick test of timestamp
    * 
-   * @param args	the commandline options
+   * @param args the commandline options
    */
-  public static void main(String [] args) {
-    
+  public static void main(String[] args) {
+
     System.err.println(Utils.doubleToString(getTimestamp().doubleValue(), 4));
   }
 } // CrossValidationResultProducer
diff --git a/src/main/java/weka/experiment/DatabaseResultProducer.java b/src/main/java/weka/experiment/DatabaseResultProducer.java
index 9bf8fca..253837d 100644
--- a/src/main/java/weka/experiment/DatabaseResultProducer.java
+++ b/src/main/java/weka/experiment/DatabaseResultProducer.java
@@ -20,9 +20,11 @@
  *
  */
 
-
 package weka.experiment;
 
+import java.util.Enumeration;
+import java.util.Vector;
+
 import weka.core.AdditionalMeasureProducer;
 import weka.core.Instances;
 import weka.core.Option;
@@ -30,90 +32,111 @@ import weka.core.OptionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
 
-import java.util.Enumeration;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * Examines a database and extracts out the results produced by the specified ResultProducer and submits them to the specified ResultListener. If a result needs to be generated, the ResultProducer is used to obtain the result.
+ * <!-- globalinfo-start --> Examines a database and extracts out the results
+ * produced by the specified ResultProducer and submits them to the specified
+ * ResultListener. If a result needs to be generated, the ResultProducer is used
+ * to obtain the result.
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- globalinfo-end -->
  * 
- * <pre> -F <field name>
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -F <field name>
  *  The name of the database field to cache over.
- *  eg: "Fold" (default none)</pre>
+ *  eg: "Fold" (default none)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a ResultProducer.
- *  eg: weka.experiment.CrossValidationResultProducer</pre>
+ *  eg: weka.experiment.CrossValidationResultProducer
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to result producer weka.experiment.CrossValidationResultProducer:
  * </pre>
  * 
- * <pre> -X <number of folds>
+ * <pre>
+ * -X <number of folds>
  *  The number of folds to use for the cross-validation.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -D
- * Save raw split evaluator output.</pre>
+ * <pre>
+ * -D
+ * Save raw split evaluator output.
+ * </pre>
  * 
- * <pre> -O <file/directory name/path>
+ * <pre>
+ * -O <file/directory name/path>
  *  The filename where raw output will be stored.
  *  If a directory name is specified then then individual
  *  outputs will be gzipped, otherwise all output will be
- *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+ *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a SplitEvaluator.
- *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+ *  eg: weka.experiment.ClassifierSplitEvaluator
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
  * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
  * 
- <!-- options-end -->
+ * <!-- options-end -->
  * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 6422 $
+ * @version $Revision: 11198 $
  */
-public class DatabaseResultProducer 
+public class DatabaseResultProducer
   extends DatabaseResultListener
   implements ResultProducer, OptionHandler, AdditionalMeasureProducer {
 
   /** for serialization */
   static final long serialVersionUID = -5620660780203158666L;
-  
+
   /** The dataset of interest */
   protected Instances m_Instances;
 
@@ -121,43 +144,46 @@ public class DatabaseResultProducer
   protected ResultListener m_ResultListener = new CSVResultListener();
 
   /** The ResultProducer used to generate results */
-  protected ResultProducer m_ResultProducer
-    = new CrossValidationResultProducer();
+  protected ResultProducer m_ResultProducer =
+    new CrossValidationResultProducer();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
+  protected String[] m_AdditionalMeasures = null;
 
   /**
    * Returns a string describing this result producer
-   * @return a description of the result producer suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the result producer suitable for displaying in the
+   *         explorer/experimenter gui
    */
+  @Override
   public String globalInfo() {
     return "Examines a database and extracts out "
-      +"the results produced by the specified ResultProducer "
-      +"and submits them to the specified ResultListener. If a result needs "
-      +"to be generated, the ResultProducer is used to obtain the result.";
+      + "the results produced by the specified ResultProducer "
+      + "and submits them to the specified ResultListener. If a result needs "
+      + "to be generated, the ResultProducer is used to obtain the result.";
   }
 
   /**
-   * Creates the DatabaseResultProducer, letting the parent constructor do
-   * it's thing.
-   *
+   * Creates the DatabaseResultProducer, letting the parent constructor do it's
+   * thing.
+   * 
    * @throws Exception if an error occurs
    */
   public DatabaseResultProducer() throws Exception {
 
     super();
   }
-  
+
   /**
-   * Gets the keys for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Keys
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the keys for a specified run number. Different run numbers correspond
+   * to different randomizations of the data. Keys produced should be sent to
+   * the current ResultListener
+   * 
    * @param run the run number to get keys for.
    * @throws Exception if a problem occurs while getting the keys
    */
+  @Override
   public void doRunKeys(int run) throws Exception {
 
     if (m_ResultProducer == null) {
@@ -177,13 +203,14 @@ public class DatabaseResultProducer
   }
 
   /**
-   * Gets the results for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Results
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the results for a specified run number. Different run numbers
+   * correspond to different randomizations of the data. Results produced should
+   * be sent to the current ResultListener
+   * 
    * @param run the run number to get results for.
    * @throws Exception if a problem occurs while getting the results
    */
+  @Override
   public void doRun(int run) throws Exception {
 
     if (m_ResultProducer == null) {
@@ -202,13 +229,14 @@ public class DatabaseResultProducer
     m_ResultProducer.doRun(run);
 
   }
-  
+
   /**
    * Prepare for the results to be received.
-   *
+   * 
    * @param rp the ResultProducer that will generate the results
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess(ResultProducer rp) throws Exception {
 
     super.preProcess(rp);
@@ -219,67 +247,70 @@ public class DatabaseResultProducer
   }
 
   /**
-   * When this method is called, it indicates that no more results
-   * will be sent that need to be grouped together in any way.
-   *
+   * When this method is called, it indicates that no more results will be sent
+   * that need to be grouped together in any way.
+   * 
    * @param rp the ResultProducer that generated the results
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess(ResultProducer rp) throws Exception {
 
     super.postProcess(rp);
     m_ResultListener.postProcess(this);
   }
-  
+
   /**
    * Prepare to generate results. The ResultProducer should call
    * preProcess(this) on the ResultListener it is to send results to.
-   *
+   * 
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess() throws Exception {
-    
+
     if (m_ResultProducer == null) {
       throw new Exception("No ResultProducer set");
     }
     m_ResultProducer.setResultListener(this);
     m_ResultProducer.preProcess();
   }
-  
+
   /**
-   * When this method is called, it indicates that no more requests to
-   * generate results for the current experiment will be sent. The
-   * ResultProducer should call preProcess(this) on the
-   * ResultListener it is to send results to.
-   *
+   * When this method is called, it indicates that no more requests to generate
+   * results for the current experiment will be sent. The ResultProducer should
+   * call preProcess(this) on the ResultListener it is to send results to.
+   * 
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess() throws Exception {
 
     m_ResultProducer.postProcess();
   }
-    
+
   /**
    * Accepts results from a ResultProducer.
-   *
+   * 
    * @param rp the ResultProducer that generated the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
-   * @param result the results stored in an array. The objects stored in
-   * the array may be Strings, Doubles, or null (for the missing value).
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
+   * @param result the results stored in an array. The objects stored in the
+   *          array may be Strings, Doubles, or null (for the missing value).
    * @throws Exception if the result could not be accepted.
    */
-  public void acceptResult(ResultProducer rp, Object [] key, Object [] result)
+  @Override
+  public void acceptResult(ResultProducer rp, Object[] key, Object[] result)
     throws Exception {
 
     if (m_ResultProducer != rp) {
       throw new Error("Unrecognized ResultProducer sending results!!");
     }
-    //    System.err.println("DBRP::acceptResult");
+    // System.err.println("DBRP::acceptResult");
 
     // Is the result needed by the listener?
     boolean isRequiredByListener = m_ResultListener.isResultRequired(this,
-								     key);
+      key);
     // Is the result already in the database?
     boolean isRequiredByDatabase = super.isResultRequired(rp, key);
 
@@ -289,8 +320,8 @@ public class DatabaseResultProducer
       // that are already in the database
       if (result != null) {
 
-	// null result could occur from a chain of doRunKeys calls
-	super.acceptResult(rp, key, result);
+        // null result could occur from a chain of doRunKeys calls
+        super.acceptResult(rp, key, result);
       }
     }
 
@@ -301,36 +332,35 @@ public class DatabaseResultProducer
   }
 
   /**
-   * Determines whether the results for a specified key must be
-   * generated.
-   *
+   * Determines whether the results for a specified key must be generated.
+   * 
    * @param rp the ResultProducer wanting to generate the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
    * @return true if the result should be generated
-   * @throws Exception if it could not be determined if the result 
-   * is needed.
+   * @throws Exception if it could not be determined if the result is needed.
    */
-  public boolean isResultRequired(ResultProducer rp, Object [] key) 
+  @Override
+  public boolean isResultRequired(ResultProducer rp, Object[] key)
     throws Exception {
 
     if (m_ResultProducer != rp) {
       throw new Error("Unrecognized ResultProducer sending results!!");
     }
-    //    System.err.println("DBRP::isResultRequired");
+    // System.err.println("DBRP::isResultRequired");
 
     // Is the result needed by the listener?
     boolean isRequiredByListener = m_ResultListener.isResultRequired(this,
-								     key);
+      key);
     // Is the result already in the database?
     boolean isRequiredByDatabase = super.isResultRequired(rp, key);
 
     if (!isRequiredByDatabase && isRequiredByListener) {
       // Pass the result through to the listener
-      Object [] result = getResultFromTable(m_ResultsTableName,
-					    rp, key);
+      Object[] result = getResultFromTable(m_ResultsTableName,
+        rp, key);
       System.err.println("Got result from database: "
-			 + DatabaseUtils.arrayToString(result));
+        + DatabaseUtils.arrayToString(result));
       m_ResultListener.acceptResult(this, key, result);
       return false;
     }
@@ -340,70 +370,73 @@ public class DatabaseResultProducer
 
   /**
    * Gets the names of each of the columns produced for a single run.
-   *
+   * 
    * @return an array containing the name of each column
    * @throws Exception if something goes wrong.
    */
-  public String [] getKeyNames() throws Exception {
+  @Override
+  public String[] getKeyNames() throws Exception {
 
     return m_ResultProducer.getKeyNames();
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    * @throws Exception if something goes wrong.
    */
-  public Object [] getKeyTypes() throws Exception {
+  @Override
+  public Object[] getKeyTypes() throws Exception {
 
     return m_ResultProducer.getKeyTypes();
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * A new result field is added for the number of results used to
-   * produce each average.
-   * If only averages are being produced the names are not altered, if
-   * standard deviations are produced then "Dev_" and "Avg_" are prepended
-   * to each result deviation and average field respectively.
-   *
+   * Gets the names of each of the columns produced for a single run. A new
+   * result field is added for the number of results used to produce each
+   * average. If only averages are being produced the names are not altered, if
+   * standard deviations are produced then "Dev_" and "Avg_" are prepended to
+   * each result deviation and average field respectively.
+   * 
    * @return an array containing the name of each column
    * @throws Exception if something goes wrong.
    */
-  public String [] getResultNames() throws Exception {
+  @Override
+  public String[] getResultNames() throws Exception {
 
     return m_ResultProducer.getResultNames();
   }
 
   /**
    * Gets the data types of each of the columns produced for a single run.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    * @throws Exception if something goes wrong.
    */
-  public Object [] getResultTypes() throws Exception {
+  @Override
+  public Object[] getResultTypes() throws Exception {
 
     return m_ResultProducer.getResultTypes();
   }
 
   /**
-   * Gets a description of the internal settings of the result
-   * producer, sufficient for distinguishing a ResultProducer
-   * instance from another with different settings (ignoring
-   * those settings set through this interface). For example,
-   * a cross-validation ResultProducer may have a setting for the
-   * number of folds. For a given state, the results produced should
-   * be compatible. Typically if a ResultProducer is an OptionHandler,
-   * this string will represent the command line arguments required
-   * to set the ResultProducer to that state.
-   *
-   * @return the description of the ResultProducer state, or null
-   * if no state is defined
+   * Gets a description of the internal settings of the result producer,
+   * sufficient for distinguishing a ResultProducer instance from another with
+   * different settings (ignoring those settings set through this interface).
+   * For example, a cross-validation ResultProducer may have a setting for the
+   * number of folds. For a given state, the results produced should be
+   * compatible. Typically if a ResultProducer is an OptionHandler, this string
+   * will represent the command line arguments required to set the
+   * ResultProducer to that state.
+   * 
+   * @return the description of the ResultProducer state, or null if no state is
+   *         defined
    */
+  @Override
   public String getCompatibilityState() {
 
     String result = "";
@@ -411,156 +444,179 @@ public class DatabaseResultProducer
       result += "<null ResultProducer>";
     } else {
       result += "-W " + m_ResultProducer.getClass().getName();
-      result  += " -- " + m_ResultProducer.getCompatibilityState();
+      result += " -- " + m_ResultProducer.getCompatibilityState();
     }
 
     return result.trim();
   }
 
-
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(2);
 
     newVector.addElement(new Option(
-	     "\tThe name of the database field to cache over.\n"
-	      +"\teg: \"Fold\" (default none)", 
-	     "F", 1, 
-	     "-F <field name>"));
+      "\tThe name of the database field to cache over.\n"
+        + "\teg: \"Fold\" (default none)",
+      "F", 1,
+      "-F <field name>"));
     newVector.addElement(new Option(
-	     "\tThe full class name of a ResultProducer.\n"
-	      +"\teg: weka.experiment.CrossValidationResultProducer", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of a ResultProducer.\n"
+        + "\teg: weka.experiment.CrossValidationResultProducer",
+      "W", 1,
+      "-W <class name>"));
 
     if ((m_ResultProducer != null) &&
-	(m_ResultProducer instanceof OptionHandler)) {
+      (m_ResultProducer instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to result producer "
-	     + m_ResultProducer.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_ResultProducer).listOptions();
+        "",
+        "", 0, "\nOptions specific to result producer "
+          + m_ResultProducer.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_ResultProducer).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -F <field name>
+   * <pre>
+   * -F <field name>
    *  The name of the database field to cache over.
-   *  eg: "Fold" (default none)</pre>
+   *  eg: "Fold" (default none)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a ResultProducer.
-   *  eg: weka.experiment.CrossValidationResultProducer</pre>
+   *  eg: weka.experiment.CrossValidationResultProducer
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to result producer weka.experiment.CrossValidationResultProducer:
    * </pre>
    * 
-   * <pre> -X <number of folds>
+   * <pre>
+   * -X <number of folds>
    *  The number of folds to use for the cross-validation.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -D
-   * Save raw split evaluator output.</pre>
+   * <pre>
+   * -D
+   * Save raw split evaluator output.
+   * </pre>
    * 
-   * <pre> -O <file/directory name/path>
+   * <pre>
+   * -O <file/directory name/path>
    *  The filename where raw output will be stored.
    *  If a directory name is specified then then individual
    *  outputs will be gzipped, otherwise all output will be
-   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a SplitEvaluator.
-   *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+   *  eg: weka.experiment.ClassifierSplitEvaluator
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
    * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All option after -- will be passed to the result producer.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     setCacheKeyName(Utils.getOption('F', options));
-    
+
     String rpName = Utils.getOption('W', options);
-    if (rpName.length() == 0) {
-      throw new Exception("A ResultProducer must be specified with"
-			  + " the -W option.");
+    if (rpName.length() > 0) {
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // RP.
+      setResultProducer((ResultProducer) Utils.forName(
+        ResultProducer.class,
+        rpName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // RP.
-    setResultProducer((ResultProducer)Utils.forName(
-		      ResultProducer.class,
-		      rpName,
-		      null));
     if (getResultProducer() instanceof OptionHandler) {
       ((OptionHandler) getResultProducer())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
     }
   }
 
   /**
    * Gets the current settings of the result producer.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] seOptions = new String [0];
-    if ((m_ResultProducer != null) && 
-	(m_ResultProducer instanceof OptionHandler)) {
-      seOptions = ((OptionHandler)m_ResultProducer).getOptions();
+    String[] seOptions = new String[0];
+    if ((m_ResultProducer != null) &&
+      (m_ResultProducer instanceof OptionHandler)) {
+      seOptions = ((OptionHandler) m_ResultProducer).getOptions();
     }
-    
-    String [] options = new String [seOptions.length + 8];
+
+    String[] options = new String[seOptions.length + 8];
     int current = 0;
 
     if (!getCacheKeyName().equals("")) {
@@ -573,8 +629,8 @@ public class DatabaseResultProducer
     }
     options[current++] = "--";
 
-    System.arraycopy(seOptions, 0, options, current, 
-		     seOptions.length);
+    System.arraycopy(seOptions, 0, options, current,
+      seOptions.length);
     current += seOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -583,36 +639,40 @@ public class DatabaseResultProducer
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in SplitEvaluators. This could contain many measures (of which only a
-   * subset may be produceable by the current resultProducer) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * SplitEvaluators. This could contain many measures (of which only a subset
+   * may be produceable by the current resultProducer) if an experiment is the
+   * type that iterates over a set of properties.
+   * 
    * @param additionalMeasures an array of measure names, null if none
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     m_AdditionalMeasures = additionalMeasures;
 
     if (m_ResultProducer != null) {
       System.err.println("DatabaseResultProducer: setting additional "
-			 +"measures for "
-			 +"ResultProducer");
+        + "measures for "
+        + "ResultProducer");
       m_ResultProducer.setAdditionalMeasures(m_AdditionalMeasures);
     }
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the result producer
+   * Returns an enumeration of any additional measure names that might be in the
+   * result producer
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_ResultProducer).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_ResultProducer).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
@@ -620,38 +680,41 @@ public class DatabaseResultProducer
 
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_ResultProducer).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_ResultProducer).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("DatabaseResultProducer: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_ResultProducer.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_ResultProducer.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
-  
-  
+
   /**
    * Sets the dataset that results will be obtained for.
-   *
+   * 
    * @param instances a value of type 'Instances'.
    */
+  @Override
   public void setInstances(Instances instances) {
-    
+
     m_Instances = instances;
   }
-  
+
   /**
    * Sets the object to send results of each run to.
-   *
+   * 
    * @param listener a value of type 'ResultListener'
    */
+  @Override
   public void setResultListener(ResultListener listener) {
 
     m_ResultListener = listener;
@@ -659,40 +722,42 @@ public class DatabaseResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String resultProducerTipText() {
     return "Set the result producer to use. If some results are not found "
-      +"in the source database then this result producer is used to generate "
-      +"them.";
+      + "in the source database then this result producer is used to generate "
+      + "them.";
   }
-  
+
   /**
    * Get the ResultProducer.
-   *
+   * 
    * @return the ResultProducer.
    */
   public ResultProducer getResultProducer() {
-    
+
     return m_ResultProducer;
   }
-  
+
   /**
    * Set the ResultProducer.
-   *
+   * 
    * @param newResultProducer new ResultProducer to use.
    */
   public void setResultProducer(ResultProducer newResultProducer) {
-    
+
     m_ResultProducer = newResultProducer;
   }
 
   /**
    * Gets a text descrption of the result producer.
-   *
+   * 
    * @return a text description of the result producer.
    */
+  @Override
   public String toString() {
 
     String result = "DatabaseResultProducer: ";
@@ -704,13 +769,14 @@ public class DatabaseResultProducer
     }
     return result;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6422 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // DatabaseResultProducer
diff --git a/src/main/java/weka/experiment/DatabaseUtils.props b/src/main/java/weka/experiment/DatabaseUtils.props
index c203ac5..87ee725 100644
--- a/src/main/java/weka/experiment/DatabaseUtils.props
+++ b/src/main/java/weka/experiment/DatabaseUtils.props
@@ -1,12 +1,12 @@
 # General information on database access can be found here:
 # http://weka.wikispaces.com/Databases
 #
-# Version: $Revision: 5836 $
+# Version: $Revision: 11149 $
 
 # The comma-separated list of jdbc drivers to use
 #jdbcDriver=RmiJdbc.RJDriver,jdbc.idbDriver
 #jdbcDriver=jdbc.idbDriver
-jdbcDriver=RmiJdbc.RJDriver,jdbc.idbDriver,org.gjt.mm.mysql.Driver,com.mckoi.JDBCDriver,org.hsqldb.jdbcDriver
+#jdbcDriver=RmiJdbc.RJDriver,jdbc.idbDriver,org.gjt.mm.mysql.Driver,com.mckoi.JDBCDriver,org.hsqldb.jdbcDriver
 #jdbcDriver=org.gjt.mm.mysql.Driver
 
 # The url to the experiment database
diff --git a/src/main/java/weka/experiment/DensityBasedClustererSplitEvaluator.java b/src/main/java/weka/experiment/DensityBasedClustererSplitEvaluator.java
index 3594d70..7dbbe6f 100644
--- a/src/main/java/weka/experiment/DensityBasedClustererSplitEvaluator.java
+++ b/src/main/java/weka/experiment/DensityBasedClustererSplitEvaluator.java
@@ -20,13 +20,15 @@
  *
  */
 
-
 package weka.experiment;
 
-import weka.clusterers.ClusterEvaluation;
-import weka.clusterers.Clusterer;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+import java.util.Enumeration;
+import java.util.Vector;
+
 import weka.clusterers.AbstractClusterer;
-import weka.clusterers.AbstractDensityBasedClusterer;
+import weka.clusterers.ClusterEvaluation;
 import weka.clusterers.DensityBasedClusterer;
 import weka.clusterers.EM;
 import weka.core.AdditionalMeasureProducer;
@@ -39,26 +41,22 @@ import weka.core.Utils;
 import weka.filters.Filter;
 import weka.filters.unsupervised.attribute.Remove;
 
-import java.io.ObjectStreamClass;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.Vector;
-
 /**
  * A SplitEvaluator that produces results for a density based clusterer.
- *
+ * 
  * -W classname <br>
- * Specify the full class name of the clusterer to evaluate. <p>
- *
+ * Specify the full class name of the clusterer to evaluate.
+ * <p>
+ * 
  * @author Mark Hall (mhall{[at]}pentaho{[dot]}org
- * @version $Revision: 5562 $
+ * @version $Revision: 11198 $
  */
 
-public class DensityBasedClustererSplitEvaluator 
+public class DensityBasedClustererSplitEvaluator
   implements SplitEvaluator,
-	     OptionHandler,
-	     AdditionalMeasureProducer,
-	     RevisionHandler {
+  OptionHandler,
+  AdditionalMeasureProducer,
+  RevisionHandler {
 
   /** Remove the class column (if set) from the data */
   protected boolean m_removeClassColumn = true;
@@ -67,16 +65,20 @@ public class DensityBasedClustererSplitEvaluator
   protected DensityBasedClusterer m_clusterer = new EM();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_additionalMeasures = null;
+  protected String[] m_additionalMeasures = null;
 
-  /** Array of booleans corresponding to the measures in m_AdditionalMeasures
-      indicating which of the AdditionalMeasures the current clusterer
-      can produce */
-  protected boolean [] m_doesProduce = null;
+  /**
+   * Array of booleans corresponding to the measures in m_AdditionalMeasures
+   * indicating which of the AdditionalMeasures the current clusterer can
+   * produce
+   */
+  protected boolean[] m_doesProduce = null;
 
-  /** The number of additional measures that need to be filled in
-      after taking into account column constraints imposed by the final
-      destination for results */
+  /**
+   * The number of additional measures that need to be filled in after taking
+   * into account column constraints imposed by the final destination for
+   * results
+   */
   protected int m_numberAdditionalMeasures = 0;
 
   /** Holds the statistics for the most recent application of the clusterer */
@@ -94,15 +96,15 @@ public class DensityBasedClustererSplitEvaluator
   /** The length of a result */
   private static final int RESULT_SIZE = 6;
 
-  
   public DensityBasedClustererSplitEvaluator() {
     updateOptions();
   }
 
   /**
    * Returns a string describing this split evaluator
-   * @return a description of the split evaluator suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the split evaluator suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return " A SplitEvaluator that produces results for a density based clusterer. ";
@@ -110,76 +112,81 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Returns an enumeration describing the available options.
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(1);
 
     newVector.addElement(new Option(
-				    "\tThe full class name of the density based clusterer.\n"
-				    +"\teg: weka.clusterers.EM", 
-				    "W", 1, 
-				    "-W <class name>"));
+      "\tThe full class name of the density based clusterer.\n"
+        + "\teg: weka.clusterers.EM",
+      "W", 1,
+      "-W <class name>"));
 
     if ((m_clusterer != null) &&
-	(m_clusterer instanceof OptionHandler)) {
+      (m_clusterer instanceof OptionHandler)) {
       newVector.addElement(new Option(
-				      "",
-				      "", 0, "\nOptions specific to clusterer "
-				      + m_clusterer.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_clusterer).listOptions();
+        "",
+        "", 0, "\nOptions specific to clusterer "
+          + m_clusterer.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_clusterer).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. Valid options are:<p>
-   *
+   * Parses a given list of options. Valid options are:
+   * <p>
+   * 
    * -W classname <br>
-   * Specify the full class name of the clusterer to evaluate. <p>
-   *
+   * Specify the full class name of the clusterer to evaluate.
+   * <p>
+   * 
    * All option after -- will be passed to the classifier.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @exception Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     String cName = Utils.getOption('W', options);
-    if (cName.length() == 0) {
-      throw new Exception("A clusterer must be specified with"
-			  + " the -W option.");
+    if (cName.length() > 0) {
+
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // Classifier.
+      setClusterer((DensityBasedClusterer) AbstractClusterer.forName(cName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // Classifier.
-    setClusterer((DensityBasedClusterer)AbstractClusterer.forName(cName, null));
     if (getClusterer() instanceof OptionHandler) {
       ((OptionHandler) getClusterer())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
       updateOptions();
     }
   }
 
   /**
    * Gets the current settings of the Classifier.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] clustererOptions = new String [0];
-    if ((m_clusterer != null) && 
-	(m_clusterer instanceof OptionHandler)) {
-      clustererOptions = ((OptionHandler)m_clusterer).getOptions();
+    String[] clustererOptions = new String[0];
+    if ((m_clusterer != null) &&
+      (m_clusterer instanceof OptionHandler)) {
+      clustererOptions = ((OptionHandler) m_clusterer).getOptions();
     }
-    
-    String [] options = new String [clustererOptions.length + 3];
+
+    String[] options = new String[clustererOptions.length + 3];
     int current = 0;
 
     if (getClusterer() != null) {
@@ -189,8 +196,8 @@ public class DensityBasedClustererSplitEvaluator
 
     options[current++] = "--";
 
-    System.arraycopy(clustererOptions, 0, options, current, 
-		     clustererOptions.length);
+    System.arraycopy(clustererOptions, 0, options, current,
+      clustererOptions.length);
     current += clustererOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -199,32 +206,34 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in Classifiers. This could contain many measures (of which only a
-   * subset may be produceable by the current Classifier) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * Classifiers. This could contain many measures (of which only a subset may
+   * be produceable by the current Classifier) if an experiment is the type that
+   * iterates over a set of properties.
+   * 
    * @param additionalMeasures a list of method names
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     // System.err.println("ClassifierSplitEvaluator: setting additional measures");
     m_additionalMeasures = additionalMeasures;
-    
+
     // determine which (if any) of the additional measures this clusterer
     // can produce
     if (m_additionalMeasures != null && m_additionalMeasures.length > 0) {
-      m_doesProduce = new boolean [m_additionalMeasures.length];
+      m_doesProduce = new boolean[m_additionalMeasures.length];
 
       if (m_clusterer instanceof AdditionalMeasureProducer) {
-	Enumeration en = ((AdditionalMeasureProducer)m_clusterer).
-	  enumerateMeasures();
-	while (en.hasMoreElements()) {
-	  String mname = (String)en.nextElement();
-	  for (int j=0;j<m_additionalMeasures.length;j++) {
-	    if (mname.compareToIgnoreCase(m_additionalMeasures[j]) == 0) {
-	      m_doesProduce[j] = true;
-	    }
-	  }
-	}
+        Enumeration en = ((AdditionalMeasureProducer) m_clusterer).
+          enumerateMeasures();
+        while (en.hasMoreElements()) {
+          String mname = (String) en.nextElement();
+          for (int j = 0; j < m_additionalMeasures.length; j++) {
+            if (mname.compareToIgnoreCase(m_additionalMeasures[j]) == 0) {
+              m_doesProduce[j] = true;
+            }
+          }
+        }
       }
     } else {
       m_doesProduce = null;
@@ -232,18 +241,20 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the classifier
+   * Returns an enumeration of any additional measure names that might be in the
+   * classifier
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_clusterer instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_clusterer).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_clusterer).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
@@ -251,33 +262,36 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Returns the value of the named measure
+   * 
    * @param measureName the name of the measure to query for its value
    * @return the value of the named measure
    * @exception IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_clusterer instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_clusterer).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_clusterer).
+        getMeasure(additionalMeasureName);
     } else {
-      throw new IllegalArgumentException("DensityBasedClustererSplitEvaluator: "
-					 +"Can't return value for : "+additionalMeasureName
-					 +". "+m_clusterer.getClass().getName()+" "
-					 +"is not an AdditionalMeasureProducer");
+      throw new IllegalArgumentException(
+        "DensityBasedClustererSplitEvaluator: "
+          + "Can't return value for : " + additionalMeasureName
+          + ". " + m_clusterer.getClass().getName() + " "
+          + "is not an AdditionalMeasureProducer");
     }
   }
 
   /**
    * Gets the data types of each of the key columns produced for a single run.
-   * The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
-   * @return an array containing objects of the type of each key column. The 
-   * objects should be Strings, or Doubles.
+   * The number of key fields must be constant for a given SplitEvaluator.
+   * 
+   * @return an array containing objects of the type of each key column. The
+   *         objects should be Strings, or Doubles.
    */
-  public Object [] getKeyTypes() {
+  @Override
+  public Object[] getKeyTypes() {
 
-    Object [] keyTypes = new Object[KEY_SIZE];
+    Object[] keyTypes = new Object[KEY_SIZE];
     keyTypes[0] = "";
     keyTypes[1] = "";
     keyTypes[2] = "";
@@ -285,15 +299,15 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Gets the names of each of the key columns produced for a single run.
-   * The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the names of each of the key columns produced for a single run. The
+   * number of key fields must be constant for a given SplitEvaluator.
+   * 
    * @return an array containing the name of each key column
    */
-  public String [] getKeyNames() {
+  @Override
+  public String[] getKeyNames() {
 
-    String [] keyNames = new String[KEY_SIZE];
+    String[] keyNames = new String[KEY_SIZE];
     keyNames[0] = "Scheme";
     keyNames[1] = "Scheme_options";
     keyNames[2] = "Scheme_version_ID";
@@ -301,16 +315,17 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Gets the key describing the current SplitEvaluator. For example
-   * This may contain the name of the classifier used for classifier
-   * predictive evaluation. The number of key fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the key describing the current SplitEvaluator. For example This may
+   * contain the name of the classifier used for classifier predictive
+   * evaluation. The number of key fields must be constant for a given
+   * SplitEvaluator.
+   * 
    * @return an array of objects containing the key.
    */
-  public Object [] getKey(){
+  @Override
+  public Object[] getKey() {
 
-    Object [] key = new Object[KEY_SIZE];
+    Object[] key = new Object[KEY_SIZE];
     key[0] = m_clusterer.getClass().getName();
     key[1] = m_clustererOptions;
     key[2] = m_clustererVersion;
@@ -318,27 +333,28 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Gets the data types of each of the result columns produced for a 
-   * single run. The number of result fields must be constant
-   * for a given SplitEvaluator.
-   *
-   * @return an array containing objects of the type of each result column. 
-   * The objects should be Strings, or Doubles.
+   * Gets the data types of each of the result columns produced for a single
+   * run. The number of result fields must be constant for a given
+   * SplitEvaluator.
+   * 
+   * @return an array containing objects of the type of each result column. The
+   *         objects should be Strings, or Doubles.
    */
-  public Object [] getResultTypes() {
-    int addm = (m_additionalMeasures != null) 
-      ? m_additionalMeasures.length 
+  @Override
+  public Object[] getResultTypes() {
+    int addm = (m_additionalMeasures != null)
+      ? m_additionalMeasures.length
       : 0;
-    int overall_length = RESULT_SIZE+addm;
+    int overall_length = RESULT_SIZE + addm;
 
-    Object [] resultTypes = new Object[overall_length];
+    Object[] resultTypes = new Object[overall_length];
     Double doub = new Double(0);
     int current = 0;
-    
+
     // number of training and testing instances
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
-    
+
     // log liklihood
     resultTypes[current++] = doub;
     // number of clusters
@@ -348,11 +364,10 @@ public class DensityBasedClustererSplitEvaluator
     resultTypes[current++] = doub;
     resultTypes[current++] = doub;
 
-
-    //    resultTypes[current++] = "";
+    // resultTypes[current++] = "";
 
     // add any additional measures
-    for (int i=0;i<addm;i++) {
+    for (int i = 0; i < addm; i++) {
       resultTypes[current++] = doub;
     }
     if (current != overall_length) {
@@ -362,19 +377,19 @@ public class DensityBasedClustererSplitEvaluator
   }
 
   /**
-   * Gets the names of each of the result columns produced for a single run.
-   * The number of result fields must be constant
-   * for a given SplitEvaluator.
-   *
+   * Gets the names of each of the result columns produced for a single run. The
+   * number of result fields must be constant for a given SplitEvaluator.
+   * 
    * @return an array containing the name of each result column
    */
-  public String [] getResultNames() {
-    int addm = (m_additionalMeasures != null) 
-      ? m_additionalMeasures.length 
+  @Override
+  public String[] getResultNames() {
+    int addm = (m_additionalMeasures != null)
+      ? m_additionalMeasures.length
       : 0;
-    int overall_length = RESULT_SIZE+addm;
-   
-    String [] resultNames = new String[overall_length];
+    int overall_length = RESULT_SIZE + addm;
+
+    String[] resultNames = new String[overall_length];
     int current = 0;
     resultNames[current++] = "Number_of_training_instances";
     resultNames[current++] = "Number_of_testing_instances";
@@ -388,9 +403,9 @@ public class DensityBasedClustererSplitEvaluator
     resultNames[current++] = "Time_testing";
 
     // Classifier defined extras
-    //    resultNames[current++] = "Summary";
+    // resultNames[current++] = "Summary";
     // add any additional measures
-    for (int i=0;i<addm;i++) {
+    for (int i = 0; i < addm; i++) {
       resultNames[current++] = m_additionalMeasures[i];
     }
     if (current != overall_length) {
@@ -401,41 +416,41 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Gets the results for the supplied train and test datasets.
-   *
+   * 
    * @param train the training Instances.
    * @param test the testing Instances.
-   * @return the results stored in an array. The objects stored in
-   * the array may be Strings, Doubles, or null (for the missing value).
+   * @return the results stored in an array. The objects stored in the array may
+   *         be Strings, Doubles, or null (for the missing value).
    * @exception Exception if a problem occurs while getting the results
    */
-  public Object [] getResult(Instances train, Instances test) 
+  @Override
+  public Object[] getResult(Instances train, Instances test)
     throws Exception {
-    
+
     if (m_clusterer == null) {
       throw new Exception("No clusterer has been specified");
     }
-    int addm = (m_additionalMeasures != null) 
-      ? m_additionalMeasures.length 
+    int addm = (m_additionalMeasures != null)
+      ? m_additionalMeasures.length
       : 0;
-    int overall_length = RESULT_SIZE+addm;
+    int overall_length = RESULT_SIZE + addm;
 
     if (m_removeClassColumn && train.classIndex() != -1) {
       // remove the class column from the training and testing data
       Remove r = new Remove();
-      r.setAttributeIndicesArray(new int [] {train.classIndex()});
+      r.setAttributeIndicesArray(new int[] { train.classIndex() });
       r.setInvertSelection(false);
       r.setInputFormat(train);
       train = Filter.useFilter(train, r);
-      
+
       test = Filter.useFilter(test, r);
     }
     train.setClassIndex(-1);
     test.setClassIndex(-1);
-      
 
     ClusterEvaluation eval = new ClusterEvaluation();
 
-    Object [] result = new Object[overall_length];
+    Object[] result = new Object[overall_length];
     long trainTimeStart = System.currentTimeMillis();
     m_clusterer.buildClusterer(train);
     double numClusters = m_clusterer.numberOfClusters();
@@ -444,7 +459,7 @@ public class DensityBasedClustererSplitEvaluator
     long testTimeStart = System.currentTimeMillis();
     eval.evaluateClusterer(test);
     long testTimeElapsed = System.currentTimeMillis() - testTimeStart;
-    //    m_result = eval.toSummaryString();
+    // m_result = eval.toSummaryString();
 
     // The results stored are all per instance -- can be multiplied by the
     // number of instances to get absolute numbers
@@ -454,27 +469,27 @@ public class DensityBasedClustererSplitEvaluator
 
     result[current++] = new Double(eval.getLogLikelihood());
     result[current++] = new Double(numClusters);
-    
+
     // Timing stats
     result[current++] = new Double(trainTimeElapsed / 1000.0);
     result[current++] = new Double(testTimeElapsed / 1000.0);
-    
-    for (int i=0;i<addm;i++) {
+
+    for (int i = 0; i < addm; i++) {
       if (m_doesProduce[i]) {
-	try {
-	  double dv = ((AdditionalMeasureProducer)m_clusterer).
-	    getMeasure(m_additionalMeasures[i]);
-	  Double value = new Double(dv);
-	  
-	  result[current++] = value;
-	} catch (Exception ex) {
-	  System.err.println(ex);
-	}
+        try {
+          double dv = ((AdditionalMeasureProducer) m_clusterer).
+            getMeasure(m_additionalMeasures[i]);
+          Double value = new Double(dv);
+
+          result[current++] = value;
+        } catch (Exception ex) {
+          System.err.println(ex);
+        }
       } else {
-	result[current++] = null;
+        result[current++] = null;
       }
     }
-    
+
     if (current != overall_length) {
       throw new Error("Results didn't fit RESULT_SIZE");
     }
@@ -483,8 +498,9 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String removeClassColumnTipText() {
     return "Remove the class column (if set) from the data.";
@@ -492,7 +508,7 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Set whether the class column should be removed from the data.
-   *
+   * 
    * @param r true if the class column is to be removed.
    */
   public void setRemoveClassColumn(boolean r) {
@@ -501,17 +517,18 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Get whether the class column is to be removed.
-   *
+   * 
    * @return true if the class column is to be removed.
    */
   public boolean getRemoveClassColumn() {
     return m_removeClassColumn;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String clustererTipText() {
     return "The density based clusterer to use.";
@@ -519,37 +536,36 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Get the value of clusterer
-   *
+   * 
    * @return Value of clusterer.
    */
   public DensityBasedClusterer getClusterer() {
-    
+
     return m_clusterer;
   }
-  
+
   /**
    * Sets the clusterer.
-   *
+   * 
    * @param newClassifier the new clusterer to use.
    */
   public void setClusterer(DensityBasedClusterer newClusterer) {
-    
+
     m_clusterer = newClusterer;
     updateOptions();
   }
 
-
   protected void updateOptions() {
-    
+
     if (m_clusterer instanceof OptionHandler) {
-      m_clustererOptions = Utils.joinOptions(((OptionHandler)m_clusterer)
-					     .getOptions());
+      m_clustererOptions = Utils.joinOptions(((OptionHandler) m_clusterer)
+        .getOptions());
     } else {
       m_clustererOptions = "";
     }
     if (m_clusterer instanceof Serializable) {
       ObjectStreamClass obs = ObjectStreamClass.lookup(m_clusterer
-						       .getClass());
+        .getClass());
       m_clustererVersion = "" + obs.getSerialVersionUID();
     } else {
       m_clustererVersion = "";
@@ -559,25 +575,27 @@ public class DensityBasedClustererSplitEvaluator
   /**
    * Set the Clusterer to use, given it's class name. A new clusterer will be
    * instantiated.
-   *
+   * 
    * @param newClusterer the Classifier class name.
    * @exception Exception if the class name is invalid.
    */
   public void setClustererName(String newClustererName) throws Exception {
 
     try {
-      setClusterer((DensityBasedClusterer)Class.forName(newClustererName)
-		    .newInstance());
+      setClusterer((DensityBasedClusterer) Class.forName(newClustererName)
+        .newInstance());
     } catch (Exception ex) {
       throw new Exception("Can't find Clusterer with class name: "
-			  + newClustererName);
+        + newClustererName);
     }
   }
 
   /**
    * Gets the raw output from the classifier
+   * 
    * @return the raw output from the classifier
    */
+  @Override
   public String getRawResultOutput() {
     StringBuffer result = new StringBuffer();
 
@@ -585,26 +603,26 @@ public class DensityBasedClustererSplitEvaluator
       return "<null> clusterer";
     }
     result.append(toString());
-    result.append("Clustering model: \n"+m_clusterer.toString()+'\n');
+    result.append("Clustering model: \n" + m_clusterer.toString() + '\n');
 
     // append the performance statistics
     if (m_result != null) {
-      //      result.append(m_result);
-      
+      // result.append(m_result);
+
       if (m_doesProduce != null) {
-	for (int i=0;i<m_doesProduce.length;i++) {
-	  if (m_doesProduce[i]) {
-	    try {
-	      double dv = ((AdditionalMeasureProducer)m_clusterer).
-		getMeasure(m_additionalMeasures[i]);
-	      Double value = new Double(dv);
-	      
-	      result.append(m_additionalMeasures[i]+" : "+value+'\n');
-	    } catch (Exception ex) {
-	      System.err.println(ex);
-	    }
-	  } 
-	}
+        for (int i = 0; i < m_doesProduce.length; i++) {
+          if (m_doesProduce[i]) {
+            try {
+              double dv = ((AdditionalMeasureProducer) m_clusterer).
+                getMeasure(m_additionalMeasures[i]);
+              Double value = new Double(dv);
+
+              result.append(m_additionalMeasures[i] + " : " + value + '\n');
+            } catch (Exception ex) {
+              System.err.println(ex);
+            }
+          }
+        }
       }
     }
     return result.toString();
@@ -612,25 +630,27 @@ public class DensityBasedClustererSplitEvaluator
 
   /**
    * Returns a text description of the split evaluator.
-   *
+   * 
    * @return a text description of the split evaluator.
    */
+  @Override
   public String toString() {
 
     String result = "DensityBasedClustererSplitEvaluator: ";
     if (m_clusterer == null) {
       return result + "<null> clusterer";
     }
-    return result + m_clusterer.getClass().getName() + " " 
+    return result + m_clusterer.getClass().getName() + " "
       + m_clustererOptions + "(version " + m_clustererVersion + ")";
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5562 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 }
diff --git a/src/main/java/weka/experiment/LearningRateResultProducer.java b/src/main/java/weka/experiment/LearningRateResultProducer.java
index 586a308..91d362f 100644
--- a/src/main/java/weka/experiment/LearningRateResultProducer.java
+++ b/src/main/java/weka/experiment/LearningRateResultProducer.java
@@ -20,9 +20,12 @@
  *
  */
 
-
 package weka.experiment;
 
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.Vector;
+
 import weka.core.AdditionalMeasureProducer;
 import weka.core.Instances;
 import weka.core.Option;
@@ -31,113 +34,142 @@ import weka.core.RevisionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
 
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * Tells a sub-ResultProducer to reproduce the current run for varying sized subsamples of the dataset. Normally used with an AveragingResultProducer and CrossValidationResultProducer combo to generate learning curve results. For non-numeric result fields, the first value is used.
+ * <!-- globalinfo-start --> Tells a sub-ResultProducer to reproduce the current
+ * run for varying sized subsamples of the dataset. Normally used with an
+ * AveragingResultProducer and CrossValidationResultProducer combo to generate
+ * learning curve results. For non-numeric result fields, the first value is
+ * used.
+ * <p/>
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- options-start --> Valid options are:
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
  * 
- * <pre> -X <num steps>
+ * <pre>
+ * -X <num steps>
  *  The number of steps in the learning rate curve.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a ResultProducer.
- *  eg: weka.experiment.CrossValidationResultProducer</pre>
+ *  eg: weka.experiment.CrossValidationResultProducer
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to result producer weka.experiment.AveragingResultProducer:
  * </pre>
  * 
- * <pre> -F <field name>
+ * <pre>
+ * -F <field name>
  *  The name of the field to average over.
- *  (default "Fold")</pre>
+ *  (default "Fold")
+ * </pre>
  * 
- * <pre> -X <num results>
+ * <pre>
+ * -X <num results>
  *  The number of results expected per average.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -S
+ * <pre>
+ * -S
  *  Calculate standard deviations.
- *  (default only averages)</pre>
+ *  (default only averages)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a ResultProducer.
- *  eg: weka.experiment.CrossValidationResultProducer</pre>
+ *  eg: weka.experiment.CrossValidationResultProducer
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to result producer weka.experiment.CrossValidationResultProducer:
  * </pre>
  * 
- * <pre> -X <number of folds>
+ * <pre>
+ * -X <number of folds>
  *  The number of folds to use for the cross-validation.
- *  (default 10)</pre>
+ *  (default 10)
+ * </pre>
  * 
- * <pre> -D
- * Save raw split evaluator output.</pre>
+ * <pre>
+ * -D
+ * Save raw split evaluator output.
+ * </pre>
  * 
- * <pre> -O <file/directory name/path>
+ * <pre>
+ * -O <file/directory name/path>
  *  The filename where raw output will be stored.
  *  If a directory name is specified then then individual
  *  outputs will be gzipped, otherwise all output will be
- *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+ *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a SplitEvaluator.
- *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+ *  eg: weka.experiment.ClassifierSplitEvaluator
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
  * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
+ * 
+ * <!-- options-end -->
  * 
- <!-- options-end -->
- *
  * All options after -- will be passed to the result producer.
  * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 6425 $
+ * @version $Revision: 11198 $
  */
-public class LearningRateResultProducer 
+public class LearningRateResultProducer
   implements ResultListener, ResultProducer, OptionHandler,
-	     AdditionalMeasureProducer, RevisionHandler {
+  AdditionalMeasureProducer, RevisionHandler {
 
   /** for serialization */
   static final long serialVersionUID = -3841159673490861331L;
-  
+
   /** The dataset of interest */
   protected Instances m_Instances;
 
@@ -145,21 +177,20 @@ public class LearningRateResultProducer
   protected ResultListener m_ResultListener = new CSVResultListener();
 
   /** The ResultProducer used to generate results */
-  protected ResultProducer m_ResultProducer
-    = new AveragingResultProducer();
+  protected ResultProducer m_ResultProducer = new AveragingResultProducer();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
+  protected String[] m_AdditionalMeasures = null;
 
-  /** 
-   * The minimum number of instances to use. If this is zero, the first
-   * step will contain m_StepSize instances 
+  /**
+   * The minimum number of instances to use. If this is zero, the first step
+   * will contain m_StepSize instances
    */
   protected int m_LowerSize = 0;
-  
+
   /**
-   * The maximum number of instances to use. -1 indicates no maximum 
-   * (other than the total number of instances)
+   * The maximum number of instances to use. -1 indicates no maximum (other than
+   * the total number of instances)
    */
   protected int m_UpperSize = -1;
 
@@ -174,42 +205,44 @@ public class LearningRateResultProducer
 
   /**
    * Returns a string describing this result producer
-   * @return a description of the result producer suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the result producer suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return "Tells a sub-ResultProducer to reproduce the current run for "
-      +"varying sized subsamples of the dataset. Normally used with "
-      +"an AveragingResultProducer and CrossValidationResultProducer "
-      +"combo to generate learning curve results. For non-numeric "
-      +"result fields, the first value is used.";
+      + "varying sized subsamples of the dataset. Normally used with "
+      + "an AveragingResultProducer and CrossValidationResultProducer "
+      + "combo to generate learning curve results. For non-numeric "
+      + "result fields, the first value is used.";
   }
 
-
   /**
-   * Determines if there are any constraints (imposed by the
-   * destination) on the result columns to be produced by
-   * resultProducers. Null should be returned if there are NO
-   * constraints, otherwise a list of column names should be
+   * Determines if there are any constraints (imposed by the destination) on the
+   * result columns to be produced by resultProducers. Null should be returned
+   * if there are NO constraints, otherwise a list of column names should be
    * returned as an array of Strings.
+   * 
    * @param rp the ResultProducer to which the constraints will apply
-   * @return an array of column names to which resutltProducer's
-   * results will be restricted.
+   * @return an array of column names to which resutltProducer's results will be
+   *         restricted.
    * @throws Exception if constraints can't be determined
    */
-  public String [] determineColumnConstraints(ResultProducer rp) 
+  @Override
+  public String[] determineColumnConstraints(ResultProducer rp)
     throws Exception {
     return null;
   }
 
   /**
-   * Gets the keys for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Keys
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the keys for a specified run number. Different run numbers correspond
+   * to different randomizations of the data. Keys produced should be sent to
+   * the current ResultListener
+   * 
    * @param run the run number to get keys for.
    * @throws Exception if a problem occurs while getting the keys
    */
+  @Override
   public void doRunKeys(int run) throws Exception {
 
     if (m_ResultProducer == null) {
@@ -233,22 +266,22 @@ public class LearningRateResultProducer
       m_CurrentSize = m_LowerSize;
     }
     while (m_CurrentSize <= m_Instances.numInstances() &&
-           ((m_UpperSize == -1) ||
-            (m_CurrentSize <= m_UpperSize))) {
+      ((m_UpperSize == -1) ||
+      (m_CurrentSize <= m_UpperSize))) {
       m_ResultProducer.doRunKeys(run);
       m_CurrentSize += m_StepSize;
     }
   }
 
-
   /**
-   * Gets the results for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Results
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the results for a specified run number. Different run numbers
+   * correspond to different randomizations of the data. Results produced should
+   * be sent to the current ResultListener
+   * 
    * @param run the run number to get results for.
    * @throws Exception if a problem occurs while getting the results
    */
+  @Override
   public void doRun(int run) throws Exception {
 
     if (m_ResultProducer == null) {
@@ -264,9 +297,10 @@ public class LearningRateResultProducer
     // Randomize on a copy of the original dataset
     Instances runInstances = new Instances(m_Instances);
     runInstances.randomize(new Random(run));
-    /*if (runInstances.classAttribute().isNominal()) {
-      runInstances.stratify(m_StepSize);
-    }*/
+    /*
+     * if (runInstances.classAttribute().isNominal()) {
+     * runInstances.stratify(m_StepSize); }
+     */
 
     // Tell the resultproducer to send results to us
     m_ResultProducer.setResultListener(this);
@@ -278,23 +312,22 @@ public class LearningRateResultProducer
       m_CurrentSize = m_LowerSize;
     }
     while (m_CurrentSize <= m_Instances.numInstances() &&
-           ((m_UpperSize == -1) ||
-            (m_CurrentSize <= m_UpperSize))) {
-      m_ResultProducer.setInstances(new Instances(runInstances, 0, 
-                                                  m_CurrentSize));
+      ((m_UpperSize == -1) ||
+      (m_CurrentSize <= m_UpperSize))) {
+      m_ResultProducer.setInstances(new Instances(runInstances, 0,
+        m_CurrentSize));
       m_ResultProducer.doRun(run);
       m_CurrentSize += m_StepSize;
     }
   }
 
-  
-  
   /**
    * Prepare for the results to be received.
-   *
+   * 
    * @param rp the ResultProducer that will generate the results
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess(ResultProducer rp) throws Exception {
 
     if (m_ResultListener == null) {
@@ -306,11 +339,12 @@ public class LearningRateResultProducer
   /**
    * Prepare to generate results. The ResultProducer should call
    * preProcess(this) on the ResultListener it is to send results to.
-   *
+   * 
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess() throws Exception {
-    
+
     if (m_ResultProducer == null) {
       throw new Exception("No ResultProducer set");
     }
@@ -318,50 +352,52 @@ public class LearningRateResultProducer
     m_ResultProducer.setResultListener(this);
     m_ResultProducer.preProcess();
   }
-  
+
   /**
-   * When this method is called, it indicates that no more results
-   * will be sent that need to be grouped together in any way.
-   *
+   * When this method is called, it indicates that no more results will be sent
+   * that need to be grouped together in any way.
+   * 
    * @param rp the ResultProducer that generated the results
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess(ResultProducer rp) throws Exception {
 
     m_ResultListener.postProcess(this);
   }
 
   /**
-   * When this method is called, it indicates that no more requests to
-   * generate results for the current experiment will be sent. The
-   * ResultProducer should call preProcess(this) on the
-   * ResultListener it is to send results to.
-   *
+   * When this method is called, it indicates that no more requests to generate
+   * results for the current experiment will be sent. The ResultProducer should
+   * call preProcess(this) on the ResultListener it is to send results to.
+   * 
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess() throws Exception {
 
     m_ResultProducer.postProcess();
   }
-  
+
   /**
    * Accepts results from a ResultProducer.
-   *
+   * 
    * @param rp the ResultProducer that generated the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
-   * @param result the results stored in an array. The objects stored in
-   * the array may be Strings, Doubles, or null (for the missing value).
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
+   * @param result the results stored in an array. The objects stored in the
+   *          array may be Strings, Doubles, or null (for the missing value).
    * @throws Exception if the result could not be accepted.
    */
-  public void acceptResult(ResultProducer rp, Object [] key, Object [] result)
+  @Override
+  public void acceptResult(ResultProducer rp, Object[] key, Object[] result)
     throws Exception {
 
     if (m_ResultProducer != rp) {
       throw new Error("Unrecognized ResultProducer sending results!!");
     }
     // Add in current step as key field
-    Object [] newKey = new Object [key.length + 1];
+    Object[] newKey = new Object[key.length + 1];
     System.arraycopy(key, 0, newKey, 0, key.length);
     newKey[key.length] = new String("" + m_CurrentSize);
     // Pass on to result listener
@@ -369,24 +405,23 @@ public class LearningRateResultProducer
   }
 
   /**
-   * Determines whether the results for a specified key must be
-   * generated.
-   *
+   * Determines whether the results for a specified key must be generated.
+   * 
    * @param rp the ResultProducer wanting to generate the results
-   * @param key an array of Objects (Strings or Doubles) that uniquely
-   * identify a result for a given ResultProducer with given compatibilityState
+   * @param key an array of Objects (Strings or Doubles) that uniquely identify
+   *          a result for a given ResultProducer with given compatibilityState
    * @return true if the result should be generated
-   * @throws Exception if it could not be determined if the result 
-   * is needed.
+   * @throws Exception if it could not be determined if the result is needed.
    */
-  public boolean isResultRequired(ResultProducer rp, Object [] key) 
+  @Override
+  public boolean isResultRequired(ResultProducer rp, Object[] key)
     throws Exception {
 
     if (m_ResultProducer != rp) {
       throw new Error("Unrecognized ResultProducer sending results!!");
     }
     // Add in current step as key field
-    Object [] newKey = new Object [key.length + 1];
+    Object[] newKey = new Object[key.length + 1];
     System.arraycopy(key, 0, newKey, 0, key.length);
     newKey[key.length] = new String("" + m_CurrentSize);
     // Pass on request to result listener
@@ -395,14 +430,15 @@ public class LearningRateResultProducer
 
   /**
    * Gets the names of each of the columns produced for a single run.
-   *
+   * 
    * @return an array containing the name of each column
    * @throws Exception if key names cannot be generated
    */
-  public String [] getKeyNames() throws Exception {
+  @Override
+  public String[] getKeyNames() throws Exception {
 
-    String [] keyNames = m_ResultProducer.getKeyNames();
-    String [] newKeyNames = new String [keyNames.length + 1];
+    String[] keyNames = m_ResultProducer.getKeyNames();
+    String[] newKeyNames = new String[keyNames.length + 1];
     System.arraycopy(keyNames, 0, newKeyNames, 0, keyNames.length);
     // Think of a better name for this key field
     newKeyNames[keyNames.length] = STEP_FIELD_NAME;
@@ -410,67 +446,69 @@ public class LearningRateResultProducer
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
-   * @throws Exception if the key types could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
+   * @throws Exception if the key types could not be determined (perhaps because
+   *           of a problem from a nested sub-resultproducer)
    */
-  public Object [] getKeyTypes() throws Exception {
+  @Override
+  public Object[] getKeyTypes() throws Exception {
 
-    Object [] keyTypes = m_ResultProducer.getKeyTypes();
-    Object [] newKeyTypes = new Object [keyTypes.length + 1];
+    Object[] keyTypes = m_ResultProducer.getKeyTypes();
+    Object[] newKeyTypes = new Object[keyTypes.length + 1];
     System.arraycopy(keyTypes, 0, newKeyTypes, 0, keyTypes.length);
     newKeyTypes[keyTypes.length] = "";
     return newKeyTypes;
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * A new result field is added for the number of results used to
-   * produce each average.
-   * If only averages are being produced the names are not altered, if
-   * standard deviations are produced then "Dev_" and "Avg_" are prepended
-   * to each result deviation and average field respectively.
-   *
+   * Gets the names of each of the columns produced for a single run. A new
+   * result field is added for the number of results used to produce each
+   * average. If only averages are being produced the names are not altered, if
+   * standard deviations are produced then "Dev_" and "Avg_" are prepended to
+   * each result deviation and average field respectively.
+   * 
    * @return an array containing the name of each column
    * @throws Exception if the result names could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   *           because of a problem from a nested sub-resultproducer)
    */
-  public String [] getResultNames() throws Exception {
+  @Override
+  public String[] getResultNames() throws Exception {
 
     return m_ResultProducer.getResultNames();
   }
 
   /**
    * Gets the data types of each of the columns produced for a single run.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    * @throws Exception if the result types could not be determined (perhaps
-   * because of a problem from a nested sub-resultproducer)
+   *           because of a problem from a nested sub-resultproducer)
    */
-  public Object [] getResultTypes() throws Exception {
+  @Override
+  public Object[] getResultTypes() throws Exception {
 
     return m_ResultProducer.getResultTypes();
   }
 
   /**
-   * Gets a description of the internal settings of the result
-   * producer, sufficient for distinguishing a ResultProducer
-   * instance from another with different settings (ignoring
-   * those settings set through this interface). For example,
-   * a cross-validation ResultProducer may have a setting for the
-   * number of folds. For a given state, the results produced should
-   * be compatible. Typically if a ResultProducer is an OptionHandler,
-   * this string will represent the command line arguments required
-   * to set the ResultProducer to that state.
-   *
-   * @return the description of the ResultProducer state, or null
-   * if no state is defined
+   * Gets a description of the internal settings of the result producer,
+   * sufficient for distinguishing a ResultProducer instance from another with
+   * different settings (ignoring those settings set through this interface).
+   * For example, a cross-validation ResultProducer may have a setting for the
+   * number of folds. For a given state, the results produced should be
+   * compatible. Typically if a ResultProducer is an OptionHandler, this string
+   * will represent the command line arguments required to set the
+   * ResultProducer to that state.
+   * 
+   * @return the description of the ResultProducer state, or null if no state is
+   *         defined
    */
+  @Override
   public String getCompatibilityState() {
 
     String result = " ";
@@ -480,142 +518,174 @@ public class LearningRateResultProducer
       result += "<null ResultProducer>";
     } else {
       result += "-W " + m_ResultProducer.getClass().getName();
-      result  += " -- " + m_ResultProducer.getCompatibilityState();
+      result += " -- " + m_ResultProducer.getCompatibilityState();
     }
-    
+
     return result.trim();
   }
 
-
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(2);
 
     newVector.addElement(new Option(
-	     "\tThe number of steps in the learning rate curve.\n"
-	      +"\t(default 10)", 
-	     "X", 1, 
-	     "-X <num steps>"));
+      "\tThe number of steps in the learning rate curve.\n"
+        + "\t(default 10)",
+      "X", 1,
+      "-X <num steps>"));
     newVector.addElement(new Option(
-	     "\tThe full class name of a ResultProducer.\n"
-	      +"\teg: weka.experiment.CrossValidationResultProducer", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of a ResultProducer.\n"
+        + "\teg: weka.experiment.CrossValidationResultProducer",
+      "W", 1,
+      "-W <class name>"));
 
     if ((m_ResultProducer != null) &&
-	(m_ResultProducer instanceof OptionHandler)) {
+      (m_ResultProducer instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to result producer "
-	     + m_ResultProducer.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_ResultProducer).listOptions();
+        "",
+        "", 0, "\nOptions specific to result producer "
+          + m_ResultProducer.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_ResultProducer).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
    * 
-   * <pre> -X <num steps>
+   * <!-- options-start --> Valid options are:
+   * <p/>
+   * 
+   * <pre>
+   * -X <num steps>
    *  The number of steps in the learning rate curve.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a ResultProducer.
-   *  eg: weka.experiment.CrossValidationResultProducer</pre>
+   *  eg: weka.experiment.CrossValidationResultProducer
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to result producer weka.experiment.AveragingResultProducer:
    * </pre>
    * 
-   * <pre> -F <field name>
+   * <pre>
+   * -F <field name>
    *  The name of the field to average over.
-   *  (default "Fold")</pre>
+   *  (default "Fold")
+   * </pre>
    * 
-   * <pre> -X <num results>
+   * <pre>
+   * -X <num results>
    *  The number of results expected per average.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -S
+   * <pre>
+   * -S
    *  Calculate standard deviations.
-   *  (default only averages)</pre>
+   *  (default only averages)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a ResultProducer.
-   *  eg: weka.experiment.CrossValidationResultProducer</pre>
+   *  eg: weka.experiment.CrossValidationResultProducer
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to result producer weka.experiment.CrossValidationResultProducer:
    * </pre>
    * 
-   * <pre> -X <number of folds>
+   * <pre>
+   * -X <number of folds>
    *  The number of folds to use for the cross-validation.
-   *  (default 10)</pre>
+   *  (default 10)
+   * </pre>
    * 
-   * <pre> -D
-   * Save raw split evaluator output.</pre>
+   * <pre>
+   * -D
+   * Save raw split evaluator output.
+   * </pre>
    * 
-   * <pre> -O <file/directory name/path>
+   * <pre>
+   * -O <file/directory name/path>
    *  The filename where raw output will be stored.
    *  If a directory name is specified then then individual
    *  outputs will be gzipped, otherwise all output will be
-   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a SplitEvaluator.
-   *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+   *  eg: weka.experiment.ClassifierSplitEvaluator
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
    * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All options after -- will be passed to the result producer.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     String stepSize = Utils.getOption('S', options);
     if (stepSize.length() != 0) {
       setStepSize(Integer.parseInt(stepSize));
@@ -629,7 +699,7 @@ public class LearningRateResultProducer
     } else {
       setLowerSize(0);
     }
-    
+
     String upperSize = Utils.getOption('U', options);
     if (upperSize.length() != 0) {
       setUpperSize(Integer.parseInt(upperSize));
@@ -638,37 +708,37 @@ public class LearningRateResultProducer
     }
 
     String rpName = Utils.getOption('W', options);
-    if (rpName.length() == 0) {
-      throw new Exception("A ResultProducer must be specified with"
-			  + " the -W option.");
+    if (rpName.length() > 0) {
+
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // RP.
+      setResultProducer((ResultProducer) Utils.forName(
+        ResultProducer.class,
+        rpName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // RP.
-    setResultProducer((ResultProducer)Utils.forName(
-		      ResultProducer.class,
-		      rpName,
-		      null));
     if (getResultProducer() instanceof OptionHandler) {
       ((OptionHandler) getResultProducer())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
     }
   }
 
   /**
    * Gets the current settings of the result producer.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] seOptions = new String [0];
-    if ((m_ResultProducer != null) && 
-	(m_ResultProducer instanceof OptionHandler)) {
-      seOptions = ((OptionHandler)m_ResultProducer).getOptions();
+    String[] seOptions = new String[0];
+    if ((m_ResultProducer != null) &&
+      (m_ResultProducer instanceof OptionHandler)) {
+      seOptions = ((OptionHandler) m_ResultProducer).getOptions();
     }
-    
-    String [] options = new String [seOptions.length + 9];
+
+    String[] options = new String[seOptions.length + 9];
     int current = 0;
 
     options[current++] = "-S";
@@ -683,8 +753,8 @@ public class LearningRateResultProducer
     }
     options[current++] = "--";
 
-    System.arraycopy(seOptions, 0, options, current, 
-		     seOptions.length);
+    System.arraycopy(seOptions, 0, options, current,
+      seOptions.length);
     current += seOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -693,36 +763,40 @@ public class LearningRateResultProducer
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in SplitEvaluators. This could contain many measures (of which only a
-   * subset may be produceable by the current resultProducer) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * SplitEvaluators. This could contain many measures (of which only a subset
+   * may be produceable by the current resultProducer) if an experiment is the
+   * type that iterates over a set of properties.
+   * 
    * @param additionalMeasures an array of measure names, null if none
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     m_AdditionalMeasures = additionalMeasures;
 
     if (m_ResultProducer != null) {
       System.err.println("LearningRateResultProducer: setting additional "
-			 +"measures for "
-			 +"ResultProducer");
+        + "measures for "
+        + "ResultProducer");
       m_ResultProducer.setAdditionalMeasures(m_AdditionalMeasures);
     }
   }
 
   /**
-   * Returns an enumeration of any additional measure names that might be
-   * in the result producer
+   * Returns an enumeration of any additional measure names that might be in the
+   * result producer
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_ResultProducer).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_ResultProducer).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
@@ -730,37 +804,40 @@ public class LearningRateResultProducer
 
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_ResultProducer instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_ResultProducer).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_ResultProducer).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("LearningRateResultProducer: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_ResultProducer.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_ResultProducer.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
 
   /**
    * Sets the dataset that results will be obtained for.
-   *
+   * 
    * @param instances a value of type 'Instances'.
    */
+  @Override
   public void setInstances(Instances instances) {
-    
+
     m_Instances = instances;
   }
 
-
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String lowerSizeTipText() {
     return "Set the minmum number of instances in a dataset. Setting zero "
@@ -770,29 +847,29 @@ public class LearningRateResultProducer
 
   /**
    * Get the value of LowerSize.
-   *
+   * 
    * @return Value of LowerSize.
    */
   public int getLowerSize() {
-    
+
     return m_LowerSize;
   }
-  
+
   /**
    * Set the value of LowerSize.
-   *
-   * @param newLowerSize Value to assign to
-   * LowerSize.
+   * 
+   * @param newLowerSize Value to assign to LowerSize.
    */
   public void setLowerSize(int newLowerSize) {
-    
+
     m_LowerSize = newLowerSize;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String upperSizeTipText() {
     return "Set the maximum number of instances in a dataset. Setting -1 "
@@ -802,30 +879,29 @@ public class LearningRateResultProducer
 
   /**
    * Get the value of UpperSize.
-   *
+   * 
    * @return Value of UpperSize.
    */
   public int getUpperSize() {
-    
+
     return m_UpperSize;
   }
-  
+
   /**
    * Set the value of UpperSize.
-   *
-   * @param newUpperSize Value to assign to
-   * UpperSize.
+   * 
+   * @param newUpperSize Value to assign to UpperSize.
    */
   public void setUpperSize(int newUpperSize) {
-    
+
     m_UpperSize = newUpperSize;
   }
 
-
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String stepSizeTipText() {
     return "Set the number of instances to add at each step.";
@@ -833,39 +909,40 @@ public class LearningRateResultProducer
 
   /**
    * Get the value of StepSize.
-   *
+   * 
    * @return Value of StepSize.
    */
   public int getStepSize() {
-    
+
     return m_StepSize;
   }
-  
+
   /**
    * Set the value of StepSize.
-   *
-   * @param newStepSize Value to assign to
-   * StepSize.
+   * 
+   * @param newStepSize Value to assign to StepSize.
    */
   public void setStepSize(int newStepSize) {
-    
+
     m_StepSize = newStepSize;
   }
 
   /**
    * Sets the object to send results of each run to.
-   *
+   * 
    * @param listener a value of type 'ResultListener'
    */
+  @Override
   public void setResultListener(ResultListener listener) {
 
     m_ResultListener = listener;
   }
-  
+
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String resultProducerTipText() {
     return "Set the resultProducer for which learning rate results should be "
@@ -874,17 +951,17 @@ public class LearningRateResultProducer
 
   /**
    * Get the ResultProducer.
-   *
+   * 
    * @return the ResultProducer.
    */
   public ResultProducer getResultProducer() {
-    
+
     return m_ResultProducer;
   }
-  
+
   /**
    * Set the ResultProducer.
-   *
+   * 
    * @param newResultProducer new ResultProducer to use.
    */
   public void setResultProducer(ResultProducer newResultProducer) {
@@ -895,9 +972,10 @@ public class LearningRateResultProducer
 
   /**
    * Gets a text descrption of the result producer.
-   *
+   * 
    * @return a text description of the result producer.
    */
+  @Override
   public String toString() {
 
     String result = "LearningRateResultProducer: ";
@@ -913,9 +991,10 @@ public class LearningRateResultProducer
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6425 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // LearningRateResultProducer
diff --git a/src/main/java/weka/experiment/RandomSplitResultProducer.java b/src/main/java/weka/experiment/RandomSplitResultProducer.java
index 56a862c..a6ea59d 100644
--- a/src/main/java/weka/experiment/RandomSplitResultProducer.java
+++ b/src/main/java/weka/experiment/RandomSplitResultProducer.java
@@ -20,9 +20,15 @@
  *
  */
 
-
 package weka.experiment;
 
+import java.io.File;
+import java.util.Calendar;
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.TimeZone;
+import java.util.Vector;
+
 import weka.core.AdditionalMeasureProducer;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -32,88 +38,101 @@ import weka.core.RevisionHandler;
 import weka.core.RevisionUtils;
 import weka.core.Utils;
 
-import java.io.File;
-import java.util.Calendar;
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.TimeZone;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * Generates a single train/test split and calls the appropriate SplitEvaluator to generate some results.
+ * <!-- globalinfo-start --> Generates a single train/test split and calls the
+ * appropriate SplitEvaluator to generate some results.
  * <p/>
- <!-- globalinfo-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- globalinfo-end -->
  * 
- * <pre> -P <percent>
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -P <percent>
  *  The percentage of instances to use for training.
- *  (default 66)</pre>
+ *  (default 66)
+ * </pre>
  * 
- * <pre> -D
- * Save raw split evaluator output.</pre>
+ * <pre>
+ * -D
+ * Save raw split evaluator output.
+ * </pre>
  * 
- * <pre> -O <file/directory name/path>
+ * <pre>
+ * -O <file/directory name/path>
  *  The filename where raw output will be stored.
  *  If a directory name is specified then then individual
  *  outputs will be gzipped, otherwise all output will be
- *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+ *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+ * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of a SplitEvaluator.
- *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+ *  eg: weka.experiment.ClassifierSplitEvaluator
+ * </pre>
  * 
- * <pre> -R
+ * <pre>
+ * -R
  *  Set when data is not to be randomized and the data sets' size.
- *  Is not to be determined via probabilistic rounding.</pre>
+ *  Is not to be determined via probabilistic rounding.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
  * </pre>
  * 
- * <pre> -W <class name>
+ * <pre>
+ * -W <class name>
  *  The full class name of the classifier.
- *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+ *  eg: weka.classifiers.bayes.NaiveBayes
+ * </pre>
  * 
- * <pre> -C <index>
+ * <pre>
+ * -C <index>
  *  The index of the class for which IR statistics
- *  are to be output. (default 1)</pre>
+ *  are to be output. (default 1)
+ * </pre>
  * 
- * <pre> -I <index>
+ * <pre>
+ * -I <index>
  *  The index of an attribute to output in the
  *  results. This attribute should identify an
  *  instance in order to know which instances are
  *  in the test set of a cross validation. if 0
- *  no output (default 0).</pre>
+ *  no output (default 0).
+ * </pre>
  * 
- * <pre> -P
+ * <pre>
+ * -P
  *  Add target and prediction columns to the result
- *  for each fold.</pre>
+ *  for each fold.
+ * </pre>
  * 
- * <pre> 
+ * <pre>
  * Options specific to classifier weka.classifiers.rules.ZeroR:
  * </pre>
  * 
- * <pre> -D
+ * <pre>
+ * -D
  *  If set, classifier is run in debug mode and
- *  may output additional info to the console</pre>
+ *  may output additional info to the console
+ * </pre>
  * 
- <!-- options-end -->
+ * <!-- options-end -->
  * 
  * All options after -- will be passed to the split evaluator.
- *
+ * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 6255 $
+ * @version $Revision: 11198 $
  */
-public class RandomSplitResultProducer 
-  implements ResultProducer, OptionHandler, AdditionalMeasureProducer, 
-             RevisionHandler {
-  
+public class RandomSplitResultProducer
+  implements ResultProducer, OptionHandler, AdditionalMeasureProducer,
+  RevisionHandler {
+
   /** for serialization */
   static final long serialVersionUID = 1403798165056795073L;
-  
+
   /** The dataset of interest */
   protected Instances m_Instances;
 
@@ -130,7 +149,7 @@ public class RandomSplitResultProducer
   protected SplitEvaluator m_SplitEvaluator = new ClassifierSplitEvaluator();
 
   /** The names of any additional measures to look for in SplitEvaluators */
-  protected String [] m_AdditionalMeasures = null;
+  protected String[] m_AdditionalMeasures = null;
 
   /** Save raw output of split evaluators --- for debugging purposes */
   protected boolean m_debugOutput = false;
@@ -140,8 +159,8 @@ public class RandomSplitResultProducer
 
   /** The destination output file/directory for raw output */
   protected File m_OutputFile = new File(
-			        new File(System.getProperty("user.dir")), 
-				"splitEvalutorOut.zip");
+    new File(System.getProperty("user.dir")),
+    "splitEvalutorOut.zip");
 
   /** The name of the key field containing the dataset name */
   public static String DATASET_FIELD_NAME = "Dataset";
@@ -154,93 +173,102 @@ public class RandomSplitResultProducer
 
   /**
    * Returns a string describing this result producer
-   * @return a description of the result producer suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the result producer suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
     return
-        "Generates a single train/test split and calls the appropriate "
+    "Generates a single train/test split and calls the appropriate "
       + "SplitEvaluator to generate some results.";
   }
 
   /**
    * Sets the dataset that results will be obtained for.
-   *
+   * 
    * @param instances a value of type 'Instances'.
    */
+  @Override
   public void setInstances(Instances instances) {
-    
+
     m_Instances = instances;
   }
 
   /**
-   * Set a list of method names for additional measures to look for
-   * in SplitEvaluators. This could contain many measures (of which only a
-   * subset may be produceable by the current SplitEvaluator) if an experiment
-   * is the type that iterates over a set of properties.
+   * Set a list of method names for additional measures to look for in
+   * SplitEvaluators. This could contain many measures (of which only a subset
+   * may be produceable by the current SplitEvaluator) if an experiment is the
+   * type that iterates over a set of properties.
+   * 
    * @param additionalMeasures an array of measure names, null if none
    */
-  public void setAdditionalMeasures(String [] additionalMeasures) {
+  @Override
+  public void setAdditionalMeasures(String[] additionalMeasures) {
     m_AdditionalMeasures = additionalMeasures;
 
     if (m_SplitEvaluator != null) {
       System.err.println("RandomSplitResultProducer: setting additional "
-			 +"measures for "
-			 +"split evaluator");
+        + "measures for "
+        + "split evaluator");
       m_SplitEvaluator.setAdditionalMeasures(m_AdditionalMeasures);
     }
   }
-  
-    /**
-     * Returns an enumeration of any additional measure names that might be
-   * in the SplitEvaluator
+
+  /**
+   * Returns an enumeration of any additional measure names that might be in the
+   * SplitEvaluator
+   * 
    * @return an enumeration of the measure names
    */
+  @Override
   public Enumeration enumerateMeasures() {
     Vector newVector = new Vector();
     if (m_SplitEvaluator instanceof AdditionalMeasureProducer) {
-      Enumeration en = ((AdditionalMeasureProducer)m_SplitEvaluator).
-	enumerateMeasures();
+      Enumeration en = ((AdditionalMeasureProducer) m_SplitEvaluator).
+        enumerateMeasures();
       while (en.hasMoreElements()) {
-	String mname = (String)en.nextElement();
-	newVector.addElement(mname);
+        String mname = (String) en.nextElement();
+        newVector.addElement(mname);
       }
     }
     return newVector.elements();
   }
-  
+
   /**
    * Returns the value of the named measure
+   * 
    * @param additionalMeasureName the name of the measure to query for its value
    * @return the value of the named measure
    * @throws IllegalArgumentException if the named measure is not supported
    */
+  @Override
   public double getMeasure(String additionalMeasureName) {
     if (m_SplitEvaluator instanceof AdditionalMeasureProducer) {
-      return ((AdditionalMeasureProducer)m_SplitEvaluator).
-	getMeasure(additionalMeasureName);
+      return ((AdditionalMeasureProducer) m_SplitEvaluator).
+        getMeasure(additionalMeasureName);
     } else {
       throw new IllegalArgumentException("RandomSplitResultProducer: "
-			  +"Can't return value for : "+additionalMeasureName
-			  +". "+m_SplitEvaluator.getClass().getName()+" "
-			  +"is not an AdditionalMeasureProducer");
+        + "Can't return value for : " + additionalMeasureName
+        + ". " + m_SplitEvaluator.getClass().getName() + " "
+        + "is not an AdditionalMeasureProducer");
     }
   }
-  
+
   /**
    * Sets the object to send results of each run to.
-   *
+   * 
    * @param listener a value of type 'ResultListener'
    */
+  @Override
   public void setResultListener(ResultListener listener) {
 
     m_ResultListener = listener;
   }
 
   /**
-   * Gets a Double representing the current date and time.
-   * eg: 1:46pm on 20/5/1999 -> 19990520.1346
-   *
+   * Gets a Double representing the current date and time. eg: 1:46pm on
+   * 20/5/1999 -> 19990520.1346
+   * 
    * @return a value of type Double
    */
   public static Double getTimestamp() {
@@ -256,9 +284,10 @@ public class RandomSplitResultProducer
 
   /**
    * Prepare to generate results.
-   *
+   * 
    * @throws Exception if an error occurs during preprocessing.
    */
+  @Override
   public void preProcess() throws Exception {
 
     if (m_SplitEvaluator == null) {
@@ -269,66 +298,69 @@ public class RandomSplitResultProducer
     }
     m_ResultListener.preProcess(this);
   }
-  
+
   /**
-   * Perform any postprocessing. When this method is called, it indicates
-   * that no more requests to generate results for the current experiment
-   * will be sent.
-   *
+   * Perform any postprocessing. When this method is called, it indicates that
+   * no more requests to generate results for the current experiment will be
+   * sent.
+   * 
    * @throws Exception if an error occurs
    */
+  @Override
   public void postProcess() throws Exception {
 
     m_ResultListener.postProcess(this);
     if (m_debugOutput) {
       if (m_ZipDest != null) {
-	m_ZipDest.finished();
-	m_ZipDest = null;
+        m_ZipDest.finished();
+        m_ZipDest = null;
       }
     }
   }
 
   /**
-   * Gets the keys for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Keys
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the keys for a specified run number. Different run numbers correspond
+   * to different randomizations of the data. Keys produced should be sent to
+   * the current ResultListener
+   * 
    * @param run the run number to get keys for.
    * @throws Exception if a problem occurs while getting the keys
    */
+  @Override
   public void doRunKeys(int run) throws Exception {
     if (m_Instances == null) {
       throw new Exception("No Instances set");
     }
     // Add in some fields to the key like run number, dataset name
-    Object [] seKey = m_SplitEvaluator.getKey();
-    Object [] key = new Object [seKey.length + 2];
+    Object[] seKey = m_SplitEvaluator.getKey();
+    Object[] key = new Object[seKey.length + 2];
     key[0] = Utils.backQuoteChars(m_Instances.relationName());
     key[1] = "" + run;
     System.arraycopy(seKey, 0, key, 2, seKey.length);
     if (m_ResultListener.isResultRequired(this, key)) {
       try {
-	m_ResultListener.acceptResult(this, key, null);
+        m_ResultListener.acceptResult(this, key, null);
       } catch (Exception ex) {
-	// Save the train and test datasets for debugging purposes?
-	throw ex;
+        // Save the train and test datasets for debugging purposes?
+        throw ex;
       }
     }
   }
 
   /**
-   * Gets the results for a specified run number. Different run
-   * numbers correspond to different randomizations of the data. Results
-   * produced should be sent to the current ResultListener
-   *
+   * Gets the results for a specified run number. Different run numbers
+   * correspond to different randomizations of the data. Results produced should
+   * be sent to the current ResultListener
+   * 
    * @param run the run number to get results for.
    * @throws Exception if a problem occurs while getting the results
    */
+  @Override
   public void doRun(int run) throws Exception {
 
     if (getRawOutput()) {
       if (m_ZipDest == null) {
-	m_ZipDest = new OutputZipper(m_OutputFile);
+        m_ZipDest = new OutputZipper(m_OutputFile);
       }
     }
 
@@ -336,8 +368,8 @@ public class RandomSplitResultProducer
       throw new Exception("No Instances set");
     }
     // Add in some fields to the key like run number, dataset name
-    Object [] seKey = m_SplitEvaluator.getKey();
-    Object [] key = new Object [seKey.length + 2];
+    Object[] seKey = m_SplitEvaluator.getKey();
+    Object[] key = new Object[seKey.length + 2];
     key[0] = Utils.backQuoteChars(m_Instances.relationName());
     key[1] = "" + run;
     System.arraycopy(seKey, 0, key, 2, seKey.length);
@@ -351,111 +383,115 @@ public class RandomSplitResultProducer
 
       if (!m_randomize) {
 
-	// Don't do any randomization
-	int trainSize = Utils.round(runInstances.numInstances() * m_TrainPercent / 100);
-	int testSize = runInstances.numInstances() - trainSize;
-	train = new Instances(runInstances, 0, trainSize);
-	test = new Instances(runInstances, trainSize, testSize);
+        // Don't do any randomization
+        int trainSize =
+          Utils.round(runInstances.numInstances() * m_TrainPercent / 100);
+        int testSize = runInstances.numInstances() - trainSize;
+        train = new Instances(runInstances, 0, trainSize);
+        test = new Instances(runInstances, trainSize, testSize);
       } else {
-	Random rand = new Random(run);
-	runInstances.randomize(rand);
-	
-	// Nominal class
-	if (runInstances.classAttribute().isNominal()) {
-	  
-	  // create the subset for each classs
-	  int numClasses = runInstances.numClasses();
-	  Instances[] subsets = new Instances[numClasses + 1];
-	  for (int i=0; i < numClasses + 1; i++) {
-	    subsets[i] = new Instances(runInstances, 10);
-	  }
-	  
-	  // divide instances into subsets
-	  Enumeration e = runInstances.enumerateInstances();
-	  while(e.hasMoreElements()) {
-	    Instance inst = (Instance) e.nextElement();
-	    if (inst.classIsMissing()) {
-	      subsets[numClasses].add(inst);
-	    } else {
-	      subsets[(int) inst.classValue()].add(inst);
-	    }
-	  }
-	  
-	  // Compactify them
-	  for (int i=0; i < numClasses + 1; i++) {
-	    subsets[i].compactify();
-	  }
-	  
-	  // merge into train and test sets
-	  train = new Instances(runInstances, runInstances.numInstances());
-	  test = new Instances(runInstances, runInstances.numInstances());
-	  for (int i = 0; i < numClasses + 1; i++) {
-	    int trainSize = 
-	      Utils.probRound(subsets[i].numInstances() * m_TrainPercent / 100, rand);
-	    for (int j = 0; j < trainSize; j++) {
-	      train.add(subsets[i].instance(j));
-	    }
-	    for (int j = trainSize; j < subsets[i].numInstances(); j++) {
-	      test.add(subsets[i].instance(j));
-	    }
-	    // free memory
-	    subsets[i] = null;
-	  }
-	  train.compactify();
-	  test.compactify();
-	  
-	  // randomize the final sets
-	  train.randomize(rand);
-	  test.randomize(rand);
-	} else {
-	  
-	  // Numeric target 
-	  int trainSize = 
-	    Utils.probRound(runInstances.numInstances() * m_TrainPercent / 100, rand);
-	  int testSize = runInstances.numInstances() - trainSize;
-	  train = new Instances(runInstances, 0, trainSize);
-	  test = new Instances(runInstances, trainSize, testSize);
-	}
+        Random rand = new Random(run);
+        runInstances.randomize(rand);
+
+        // Nominal class
+        if (runInstances.classAttribute().isNominal()) {
+
+          // create the subset for each classs
+          int numClasses = runInstances.numClasses();
+          Instances[] subsets = new Instances[numClasses + 1];
+          for (int i = 0; i < numClasses + 1; i++) {
+            subsets[i] = new Instances(runInstances, 10);
+          }
+
+          // divide instances into subsets
+          Enumeration e = runInstances.enumerateInstances();
+          while (e.hasMoreElements()) {
+            Instance inst = (Instance) e.nextElement();
+            if (inst.classIsMissing()) {
+              subsets[numClasses].add(inst);
+            } else {
+              subsets[(int) inst.classValue()].add(inst);
+            }
+          }
+
+          // Compactify them
+          for (int i = 0; i < numClasses + 1; i++) {
+            subsets[i].compactify();
+          }
+
+          // merge into train and test sets
+          train = new Instances(runInstances, runInstances.numInstances());
+          test = new Instances(runInstances, runInstances.numInstances());
+          for (int i = 0; i < numClasses + 1; i++) {
+            int trainSize =
+              Utils.probRound(subsets[i].numInstances() * m_TrainPercent / 100,
+                rand);
+            for (int j = 0; j < trainSize; j++) {
+              train.add(subsets[i].instance(j));
+            }
+            for (int j = trainSize; j < subsets[i].numInstances(); j++) {
+              test.add(subsets[i].instance(j));
+            }
+            // free memory
+            subsets[i] = null;
+          }
+          train.compactify();
+          test.compactify();
+
+          // randomize the final sets
+          train.randomize(rand);
+          test.randomize(rand);
+        } else {
+
+          // Numeric target
+          int trainSize =
+            Utils.probRound(runInstances.numInstances() * m_TrainPercent / 100,
+              rand);
+          int testSize = runInstances.numInstances() - trainSize;
+          train = new Instances(runInstances, 0, trainSize);
+          test = new Instances(runInstances, trainSize, testSize);
+        }
       }
       try {
-	Object [] seResults = m_SplitEvaluator.getResult(train, test);
-	Object [] results = new Object [seResults.length + 1];
-	results[0] = getTimestamp();
-	System.arraycopy(seResults, 0, results, 1,
-			 seResults.length);
-	if (m_debugOutput) {
-	  String resultName = 
-	    (""+run+"."+
-	     Utils.backQuoteChars(runInstances.relationName())
-	     +"."
-	     +m_SplitEvaluator.toString()).replace(' ','_');
-	  resultName = Utils.removeSubstring(resultName, 
-					     "weka.classifiers.");
-	  resultName = Utils.removeSubstring(resultName, 
-					     "weka.filters.");
-	  resultName = Utils.removeSubstring(resultName, 
-					     "weka.attributeSelection.");
-	  m_ZipDest.zipit(m_SplitEvaluator.getRawResultOutput(), resultName);
-	}
-	m_ResultListener.acceptResult(this, key, results);
+        Object[] seResults = m_SplitEvaluator.getResult(train, test);
+        Object[] results = new Object[seResults.length + 1];
+        results[0] = getTimestamp();
+        System.arraycopy(seResults, 0, results, 1,
+          seResults.length);
+        if (m_debugOutput) {
+          String resultName =
+            ("" + run + "." +
+              Utils.backQuoteChars(runInstances.relationName())
+              + "."
+              + m_SplitEvaluator.toString()).replace(' ', '_');
+          resultName = Utils.removeSubstring(resultName,
+            "weka.classifiers.");
+          resultName = Utils.removeSubstring(resultName,
+            "weka.filters.");
+          resultName = Utils.removeSubstring(resultName,
+            "weka.attributeSelection.");
+          m_ZipDest.zipit(m_SplitEvaluator.getRawResultOutput(), resultName);
+        }
+        m_ResultListener.acceptResult(this, key, results);
       } catch (Exception ex) {
-	// Save the train and test datasets for debugging purposes?
-	throw ex;
+        // Save the train and test datasets for debugging purposes?
+        throw ex;
       }
     }
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * This method should really be static.
-   *
+   * Gets the names of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
    * @return an array containing the name of each column
    */
-  public String [] getKeyNames() {
+  @Override
+  public String[] getKeyNames() {
 
-    String [] keyNames = m_SplitEvaluator.getKeyNames();
+    String[] keyNames = m_SplitEvaluator.getKeyNames();
     // Add in the names of our extra key fields
-    String [] newKeyNames = new String [keyNames.length + 2];
+    String[] newKeyNames = new String[keyNames.length + 2];
     newKeyNames[0] = DATASET_FIELD_NAME;
     newKeyNames[1] = RUN_FIELD_NAME;
     System.arraycopy(keyNames, 0, newKeyNames, 2, keyNames.length);
@@ -463,17 +499,18 @@ public class RandomSplitResultProducer
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    */
-  public Object [] getKeyTypes() {
+  @Override
+  public Object[] getKeyTypes() {
 
-    Object [] keyTypes = m_SplitEvaluator.getKeyTypes();
+    Object[] keyTypes = m_SplitEvaluator.getKeyTypes();
     // Add in the types of our extra fields
-    Object [] newKeyTypes = new String [keyTypes.length + 2];
+    Object[] newKeyTypes = new String[keyTypes.length + 2];
     newKeyTypes[0] = new String();
     newKeyTypes[1] = new String();
     System.arraycopy(keyTypes, 0, newKeyTypes, 2, keyTypes.length);
@@ -481,52 +518,54 @@ public class RandomSplitResultProducer
   }
 
   /**
-   * Gets the names of each of the columns produced for a single run.
-   * This method should really be static.
-   *
+   * Gets the names of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
    * @return an array containing the name of each column
    */
-  public String [] getResultNames() {
+  @Override
+  public String[] getResultNames() {
 
-    String [] resultNames = m_SplitEvaluator.getResultNames();
+    String[] resultNames = m_SplitEvaluator.getResultNames();
     // Add in the names of our extra Result fields
-    String [] newResultNames = new String [resultNames.length + 1];
+    String[] newResultNames = new String[resultNames.length + 1];
     newResultNames[0] = TIMESTAMP_FIELD_NAME;
     System.arraycopy(resultNames, 0, newResultNames, 1, resultNames.length);
     return newResultNames;
   }
 
   /**
-   * Gets the data types of each of the columns produced for a single run.
-   * This method should really be static.
-   *
-   * @return an array containing objects of the type of each column. The 
-   * objects should be Strings, or Doubles.
+   * Gets the data types of each of the columns produced for a single run. This
+   * method should really be static.
+   * 
+   * @return an array containing objects of the type of each column. The objects
+   *         should be Strings, or Doubles.
    */
-  public Object [] getResultTypes() {
+  @Override
+  public Object[] getResultTypes() {
 
-    Object [] resultTypes = m_SplitEvaluator.getResultTypes();
+    Object[] resultTypes = m_SplitEvaluator.getResultTypes();
     // Add in the types of our extra Result fields
-    Object [] newResultTypes = new Object [resultTypes.length + 1];
+    Object[] newResultTypes = new Object[resultTypes.length + 1];
     newResultTypes[0] = new Double(0);
     System.arraycopy(resultTypes, 0, newResultTypes, 1, resultTypes.length);
     return newResultTypes;
   }
 
   /**
-   * Gets a description of the internal settings of the result
-   * producer, sufficient for distinguishing a ResultProducer
-   * instance from another with different settings (ignoring
-   * those settings set through this interface). For example,
-   * a cross-validation ResultProducer may have a setting for the
-   * number of folds. For a given state, the results produced should
-   * be compatible. Typically if a ResultProducer is an OptionHandler,
-   * this string will represent the command line arguments required
-   * to set the ResultProducer to that state.
-   *
-   * @return the description of the ResultProducer state, or null
-   * if no state is defined
+   * Gets a description of the internal settings of the result producer,
+   * sufficient for distinguishing a ResultProducer instance from another with
+   * different settings (ignoring those settings set through this interface).
+   * For example, a cross-validation ResultProducer may have a setting for the
+   * number of folds. For a given state, the results produced should be
+   * compatible. Typically if a ResultProducer is an OptionHandler, this string
+   * will represent the command line arguments required to set the
+   * ResultProducer to that state.
+   * 
+   * @return the description of the ResultProducer state, or null if no state is
+   *         defined
    */
+  @Override
   public String getCompatibilityState() {
 
     String result = "-P " + m_TrainPercent;
@@ -543,59 +582,64 @@ public class RandomSplitResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String outputFileTipText() {
     return "Set the destination for saving raw output. If the rawOutput "
-      +"option is selected, then output from the splitEvaluator for "
-      +"individual train-test splits is saved. If the destination is a "
-      +"directory, "
-      +"then each output is saved to an individual gzip file; if the "
-      +"destination is a file, then each output is saved as an entry "
-      +"in a zip file.";
+      + "option is selected, then output from the splitEvaluator for "
+      + "individual train-test splits is saved. If the destination is a "
+      + "directory, "
+      + "then each output is saved to an individual gzip file; if the "
+      + "destination is a file, then each output is saved as an entry "
+      + "in a zip file.";
   }
 
   /**
    * Get the value of OutputFile.
-   *
+   * 
    * @return Value of OutputFile.
    */
   public File getOutputFile() {
-    
+
     return m_OutputFile;
   }
-  
+
   /**
    * Set the value of OutputFile.
-   *
+   * 
    * @param newOutputFile Value to assign to OutputFile.
    */
   public void setOutputFile(File newOutputFile) {
-    
+
     m_OutputFile = newOutputFile;
-  }  
+  }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String randomizeDataTipText() {
-    return "Do not randomize dataset and do not perform probabilistic rounding " +
+    return "Do not randomize dataset and do not perform probabilistic rounding "
+      +
       "if false";
   }
 
   /**
    * Get if dataset is to be randomized
+   * 
    * @return true if dataset is to be randomized
    */
   public boolean getRandomizeData() {
     return m_randomize;
   }
-  
+
   /**
    * Set to true if dataset is to be randomized
+   * 
    * @param d true if dataset is to be randomized
    */
   public void setRandomizeData(boolean d) {
@@ -604,24 +648,27 @@ public class RandomSplitResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String rawOutputTipText() {
     return "Save raw output (useful for debugging). If set, then output is "
-      +"sent to the destination specified by outputFile";
+      + "sent to the destination specified by outputFile";
   }
 
   /**
    * Get if raw split evaluator output is to be saved
+   * 
    * @return true if raw split evalutor output is to be saved
    */
   public boolean getRawOutput() {
     return m_debugOutput;
   }
-  
+
   /**
    * Set to true if raw split evaluator output is to be saved
+   * 
    * @param d true if output is to be saved
    */
   public void setRawOutput(boolean d) {
@@ -630,8 +677,9 @@ public class RandomSplitResultProducer
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String trainPercentTipText() {
     return "Set the percentage of data to use for training.";
@@ -639,176 +687,199 @@ public class RandomSplitResultProducer
 
   /**
    * Get the value of TrainPercent.
-   *
+   * 
    * @return Value of TrainPercent.
    */
   public double getTrainPercent() {
-    
+
     return m_TrainPercent;
   }
-  
+
   /**
    * Set the value of TrainPercent.
-   *
+   * 
    * @param newTrainPercent Value to assign to TrainPercent.
    */
   public void setTrainPercent(double newTrainPercent) {
-    
+
     m_TrainPercent = newTrainPercent;
   }
 
   /**
    * Returns the tip text for this property
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String splitEvaluatorTipText() {
     return "The evaluator to apply to the test data. "
-      +"This may be a classifier, regression scheme etc.";
+      + "This may be a classifier, regression scheme etc.";
   }
 
   /**
    * Get the SplitEvaluator.
-   *
+   * 
    * @return the SplitEvaluator.
    */
   public SplitEvaluator getSplitEvaluator() {
-    
+
     return m_SplitEvaluator;
   }
-  
+
   /**
    * Set the SplitEvaluator.
-   *
+   * 
    * @param newSplitEvaluator new SplitEvaluator to use.
    */
   public void setSplitEvaluator(SplitEvaluator newSplitEvaluator) {
-    
+
     m_SplitEvaluator = newSplitEvaluator;
     m_SplitEvaluator.setAdditionalMeasures(m_AdditionalMeasures);
   }
 
   /**
    * Returns an enumeration describing the available options..
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(5);
 
     newVector.addElement(new Option(
-	     "\tThe percentage of instances to use for training.\n"
-	      +"\t(default 66)", 
-	     "P", 1, 
-	     "-P <percent>"));
+      "\tThe percentage of instances to use for training.\n"
+        + "\t(default 66)",
+      "P", 1,
+      "-P <percent>"));
 
     newVector.addElement(new Option(
-	     "Save raw split evaluator output.",
-	     "D",0,"-D"));
+      "Save raw split evaluator output.",
+      "D", 0, "-D"));
 
     newVector.addElement(new Option(
-	     "\tThe filename where raw output will be stored.\n"
-	     +"\tIf a directory name is specified then then individual\n"
-	     +"\toutputs will be gzipped, otherwise all output will be\n"
-	     +"\tzipped to the named file. Use in conjuction with -D."
-	     +"\t(default splitEvalutorOut.zip)", 
-	     "O", 1, 
-	     "-O <file/directory name/path>"));
+      "\tThe filename where raw output will be stored.\n"
+        + "\tIf a directory name is specified then then individual\n"
+        + "\toutputs will be gzipped, otherwise all output will be\n"
+        + "\tzipped to the named file. Use in conjuction with -D."
+        + "\t(default splitEvalutorOut.zip)",
+      "O", 1,
+      "-O <file/directory name/path>"));
 
     newVector.addElement(new Option(
-	     "\tThe full class name of a SplitEvaluator.\n"
-	      +"\teg: weka.experiment.ClassifierSplitEvaluator", 
-	     "W", 1, 
-	     "-W <class name>"));
+      "\tThe full class name of a SplitEvaluator.\n"
+        + "\teg: weka.experiment.ClassifierSplitEvaluator",
+      "W", 1,
+      "-W <class name>"));
 
     newVector.addElement(new Option(
-	     "\tSet when data is not to be randomized and the data sets' size.\n"
-	     + "\tIs not to be determined via probabilistic rounding.",
-	     "R",0,"-R"));
+      "\tSet when data is not to be randomized and the data sets' size.\n"
+        + "\tIs not to be determined via probabilistic rounding.",
+      "R", 0, "-R"));
 
- 
     if ((m_SplitEvaluator != null) &&
-	(m_SplitEvaluator instanceof OptionHandler)) {
+      (m_SplitEvaluator instanceof OptionHandler)) {
       newVector.addElement(new Option(
-	     "",
-	     "", 0, "\nOptions specific to split evaluator "
-	     + m_SplitEvaluator.getClass().getName() + ":"));
-      Enumeration enu = ((OptionHandler)m_SplitEvaluator).listOptions();
+        "",
+        "", 0, "\nOptions specific to split evaluator "
+          + m_SplitEvaluator.getClass().getName() + ":"));
+      Enumeration enu = ((OptionHandler) m_SplitEvaluator).listOptions();
       while (enu.hasMoreElements()) {
-	newVector.addElement(enu.nextElement());
+        newVector.addElement(enu.nextElement());
       }
     }
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
-   *
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * Parses a given list of options.
+   * <p/>
+   * 
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -P <percent>
+   * <pre>
+   * -P <percent>
    *  The percentage of instances to use for training.
-   *  (default 66)</pre>
+   *  (default 66)
+   * </pre>
    * 
-   * <pre> -D
-   * Save raw split evaluator output.</pre>
+   * <pre>
+   * -D
+   * Save raw split evaluator output.
+   * </pre>
    * 
-   * <pre> -O <file/directory name/path>
+   * <pre>
+   * -O <file/directory name/path>
    *  The filename where raw output will be stored.
    *  If a directory name is specified then then individual
    *  outputs will be gzipped, otherwise all output will be
-   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)</pre>
+   *  zipped to the named file. Use in conjuction with -D. (default splitEvalutorOut.zip)
+   * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of a SplitEvaluator.
-   *  eg: weka.experiment.ClassifierSplitEvaluator</pre>
+   *  eg: weka.experiment.ClassifierSplitEvaluator
+   * </pre>
    * 
-   * <pre> -R
+   * <pre>
+   * -R
    *  Set when data is not to be randomized and the data sets' size.
-   *  Is not to be determined via probabilistic rounding.</pre>
+   *  Is not to be determined via probabilistic rounding.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to split evaluator weka.experiment.ClassifierSplitEvaluator:
    * </pre>
    * 
-   * <pre> -W <class name>
+   * <pre>
+   * -W <class name>
    *  The full class name of the classifier.
-   *  eg: weka.classifiers.bayes.NaiveBayes</pre>
+   *  eg: weka.classifiers.bayes.NaiveBayes
+   * </pre>
    * 
-   * <pre> -C <index>
+   * <pre>
+   * -C <index>
    *  The index of the class for which IR statistics
-   *  are to be output. (default 1)</pre>
+   *  are to be output. (default 1)
+   * </pre>
    * 
-   * <pre> -I <index>
+   * <pre>
+   * -I <index>
    *  The index of an attribute to output in the
    *  results. This attribute should identify an
    *  instance in order to know which instances are
    *  in the test set of a cross validation. if 0
-   *  no output (default 0).</pre>
+   *  no output (default 0).
+   * </pre>
    * 
-   * <pre> -P
+   * <pre>
+   * -P
    *  Add target and prediction columns to the result
-   *  for each fold.</pre>
+   *  for each fold.
+   * </pre>
    * 
-   * <pre> 
+   * <pre>
    * Options specific to classifier weka.classifiers.rules.ZeroR:
    * </pre>
    * 
-   * <pre> -D
+   * <pre>
+   * -D
    *  If set, classifier is run in debug mode and
-   *  may output additional info to the console</pre>
+   *  may output additional info to the console
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * All options after -- will be passed to the split evaluator.
-   *
+   * 
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    
+
     setRawOutput(Utils.getFlag('D', options));
     setRandomizeData(!Utils.getFlag('R', options));
 
@@ -825,50 +896,51 @@ public class RandomSplitResultProducer
     }
 
     String seName = Utils.getOption('W', options);
-    if (seName.length() == 0) {
-      throw new Exception("A SplitEvaluator must be specified with"
-			  + " the -W option.");
+    if (seName.length() > 0) {
+
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // SE.
+      setSplitEvaluator((SplitEvaluator) Utils.forName(
+        SplitEvaluator.class,
+        seName,
+        null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // SE.
-    setSplitEvaluator((SplitEvaluator)Utils.forName(
-		      SplitEvaluator.class,
-		      seName,
-		      null));
     if (getSplitEvaluator() instanceof OptionHandler) {
       ((OptionHandler) getSplitEvaluator())
-	.setOptions(Utils.partitionOptions(options));
+        .setOptions(Utils.partitionOptions(options));
     }
   }
 
   /**
    * Gets the current settings of the result producer.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] seOptions = new String [0];
-    if ((m_SplitEvaluator != null) && 
-	(m_SplitEvaluator instanceof OptionHandler)) {
-      seOptions = ((OptionHandler)m_SplitEvaluator).getOptions();
+    String[] seOptions = new String[0];
+    if ((m_SplitEvaluator != null) &&
+      (m_SplitEvaluator instanceof OptionHandler)) {
+      seOptions = ((OptionHandler) m_SplitEvaluator).getOptions();
     }
-    
-    String [] options = new String [seOptions.length + 9];
+
+    String[] options = new String[seOptions.length + 9];
     int current = 0;
 
-    options[current++] = "-P"; options[current++] = "" + getTrainPercent();
-    
+    options[current++] = "-P";
+    options[current++] = "" + getTrainPercent();
+
     if (getRawOutput()) {
       options[current++] = "-D";
     }
-    
+
     if (!getRandomizeData()) {
       options[current++] = "-R";
     }
 
-    options[current++] = "-O"; 
+    options[current++] = "-O";
     options[current++] = getOutputFile().getName();
 
     if (getSplitEvaluator() != null) {
@@ -877,8 +949,8 @@ public class RandomSplitResultProducer
     }
     options[current++] = "--";
 
-    System.arraycopy(seOptions, 0, options, current, 
-		     seOptions.length);
+    System.arraycopy(seOptions, 0, options, current,
+      seOptions.length);
     current += seOptions.length;
     while (current < options.length) {
       options[current++] = "";
@@ -888,9 +960,10 @@ public class RandomSplitResultProducer
 
   /**
    * Gets a text descrption of the result producer.
-   *
+   * 
    * @return a text description of the result producer.
    */
+  @Override
   public String toString() {
 
     String result = "RandomSplitResultProducer: ";
@@ -906,9 +979,10 @@ public class RandomSplitResultProducer
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 6255 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // RandomSplitResultProducer
diff --git a/src/main/java/weka/experiment/RegressionSplitEvaluator.java b/src/main/java/weka/experiment/RegressionSplitEvaluator.java
index a8ec04e..664159b 100644
--- a/src/main/java/weka/experiment/RegressionSplitEvaluator.java
+++ b/src/main/java/weka/experiment/RegressionSplitEvaluator.java
@@ -73,7 +73,7 @@ import weka.core.Utils;
  * <!-- options-end -->
  * 
  * @author Len Trigg (trigg at cs.waikato.ac.nz)
- * @version $Revision: 10475 $
+ * @version $Revision: 11198 $
  */
 public class RegressionSplitEvaluator implements SplitEvaluator, OptionHandler,
   AdditionalMeasureProducer, RevisionHandler {
@@ -191,14 +191,13 @@ public class RegressionSplitEvaluator implements SplitEvaluator, OptionHandler,
   public void setOptions(String[] options) throws Exception {
 
     String cName = Utils.getOption('W', options);
-    if (cName.length() == 0) {
-      throw new Exception("A classifier must be specified with"
-        + " the -W option.");
+    if (cName.length() > 0) {
+
+      // Do it first without options, so if an exception is thrown during
+      // the option setting, listOptions will contain options for the actual
+      // Classifier.
+      setClassifier(Classifier.forName(cName, null));
     }
-    // Do it first without options, so if an exception is thrown during
-    // the option setting, listOptions will contain options for the actual
-    // Classifier.
-    setClassifier(Classifier.forName(cName, null));
     if (getClassifier() instanceof OptionHandler) {
       ((OptionHandler) getClassifier()).setOptions(Utils
         .partitionOptions(options));
@@ -555,7 +554,8 @@ public class RegressionSplitEvaluator implements SplitEvaluator, OptionHandler,
     result[current++] = new Double(trainTimeElapsed / 1000.0);
     result[current++] = new Double(testTimeElapsed / 1000.0);
     if (canMeasureCPUTime) {
-      result[current++] = new Double((trainCPUTimeElapsed / 1000000.0) / 1000.0);
+      result[current++] =
+        new Double((trainCPUTimeElapsed / 1000000.0) / 1000.0);
       result[current++] = new Double((testCPUTimeElapsed / 1000000.0) / 1000.0);
     } else {
       result[current++] = new Double(Instance.missingValue());
@@ -740,6 +740,6 @@ public class RegressionSplitEvaluator implements SplitEvaluator, OptionHandler,
    */
   @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 10475 $");
+    return RevisionUtils.extract("$Revision: 11198 $");
   }
 } // RegressionSplitEvaluator
diff --git a/src/main/java/weka/filters/supervised/attribute/AttributeSelection.java b/src/main/java/weka/filters/supervised/attribute/AttributeSelection.java
index 04bd7f5..13c5877 100644
--- a/src/main/java/weka/filters/supervised/attribute/AttributeSelection.java
+++ b/src/main/java/weka/filters/supervised/attribute/AttributeSelection.java
@@ -29,8 +29,6 @@ import weka.attributeSelection.AttributeTransformer;
 import weka.attributeSelection.BestFirst;
 import weka.attributeSelection.CfsSubsetEval;
 import weka.attributeSelection.Ranker;
-import weka.attributeSelection.UnsupervisedAttributeEvaluator;
-import weka.attributeSelection.UnsupervisedSubsetEvaluator;
 import weka.core.Capabilities;
 import weka.core.FastVector;
 import weka.core.Instance;
@@ -97,7 +95,7 @@ import java.util.Vector;
  <!-- options-end -->
  *
  * @author Mark Hall (mhall at cs.waikato.ac.nz)
- * @version $Revision: 5541 $
+ * @version $Revision: 10868 $
  */
 public class AttributeSelection 
   extends Filter
@@ -120,6 +118,9 @@ public class AttributeSelection
 
   /** holds the selected attributes  */
   private int [] m_SelectedAttributes;
+  
+  /** True if the input format has a class attribute set */
+  protected boolean m_hasClass;
 
   /**
    * Returns a string describing this filter
@@ -451,6 +452,8 @@ public class AttributeSelection
     }
 
     if (!isOutputFormatDefined()) {
+      m_hasClass = (getInputFormat().classIndex() >= 0);
+      
       m_trainSelector.setEvaluator(m_ASEvaluator);
       m_trainSelector.setSearch(m_ASSearch);
       m_trainSelector.SelectAttributes(getInputFormat());
@@ -506,8 +509,9 @@ public class AttributeSelection
       new Instances(getInputFormat().relationName(), attributes, 0);
 
 
-    if (!(m_ASEvaluator instanceof UnsupervisedSubsetEvaluator) &&
-	!(m_ASEvaluator instanceof UnsupervisedAttributeEvaluator)) {
+//    if (!(m_ASEvaluator instanceof UnsupervisedSubsetEvaluator) &&
+//	!(m_ASEvaluator instanceof UnsupervisedAttributeEvaluator)) {
+    if (m_hasClass) {
       outputFormat.setClassIndex(m_SelectedAttributes.length - 1);
     }
     
@@ -563,7 +567,7 @@ public class AttributeSelection
    * @return		the revision
    */
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 5541 $");
+    return RevisionUtils.extract("$Revision: 10868 $");
   }
 
   /**
diff --git a/src/main/java/weka/filters/unsupervised/attribute/NumericToNominal.java b/src/main/java/weka/filters/unsupervised/attribute/NumericToNominal.java
index e4054f0..926c821 100644
--- a/src/main/java/weka/filters/unsupervised/attribute/NumericToNominal.java
+++ b/src/main/java/weka/filters/unsupervised/attribute/NumericToNominal.java
@@ -21,8 +21,14 @@
 
 package weka.filters.unsupervised.attribute;
 
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Vector;
+
 import weka.core.Attribute;
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.FastVector;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -31,34 +37,35 @@ import weka.core.Range;
 import weka.core.RevisionUtils;
 import weka.core.SparseInstance;
 import weka.core.Utils;
-import weka.core.Capabilities.Capability;
 import weka.filters.SimpleBatchFilter;
 
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Vector;
-
 /**
- <!-- globalinfo-start -->
- * A filter for turning numeric attributes into nominal ones. Unlike discretization, it just takes all numeric values and adds them to the list of nominal values of that attribute. Useful after CSV imports, to enforce certain attributes to become nominal, e.g., the class attribute, containing values from 1 to 5.
+ * <!-- globalinfo-start --> A filter for turning numeric attributes into
+ * nominal ones. Unlike discretization, it just takes all numeric values and
+ * adds them to the list of nominal values of that attribute. Useful after CSV
+ * imports, to enforce certain attributes to become nominal, e.g., the class
+ * attribute, containing values from 1 to 5.
  * <p/>
- <!-- globalinfo-end -->
+ * <!-- globalinfo-end -->
  * 
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- options-start --> Valid options are:
+ * <p/>
  * 
- * <pre> -R <col1,col2-col4,...>
+ * <pre>
+ * -R <col1,col2-col4,...>
  *  Specifies list of columns to Discretize. First and last are valid indexes.
- *  (default: first-last)</pre>
+ *  (default: first-last)
+ * </pre>
  * 
- * <pre> -V
- *  Invert matching sense of column indexes.</pre>
+ * <pre>
+ * -V
+ *  Invert matching sense of column indexes.
+ * </pre>
  * 
- <!-- options-end -->
- *
- * @author  fracpete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 8576 $
+ * <!-- options-end -->
+ * 
+ * @author fracpete (fracpete at waikato dot ac dot nz)
+ * @version $Revision: 10988 $
  */
 public class NumericToNominal
   extends SimpleBatchFilter {
@@ -68,7 +75,7 @@ public class NumericToNominal
 
   /** the maximum number of decimals to use */
   protected final static int MAX_DECIMALS = 6;
-  
+
   /** Stores which columns to turn into nominals */
   protected Range m_Cols = new Range("first-last");
 
@@ -77,13 +84,14 @@ public class NumericToNominal
 
   /**
    * Returns a string describing this filter
-   *
-   * @return 		a description of the filter suitable for
-   * 			displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the filter suitable for displaying in the
+   *         explorer/experimenter gui
    */
+  @Override
   public String globalInfo() {
-    return 
-        "A filter for turning numeric attributes into nominal ones. Unlike "
+    return
+    "A filter for turning numeric attributes into nominal ones. Unlike "
       + "discretization, it just takes all numeric values and adds them to "
       + "the list of nominal values of that attribute. Useful after CSV "
       + "imports, to enforce certain attributes to become nominal, e.g., "
@@ -92,103 +100,115 @@ public class NumericToNominal
 
   /**
    * Gets an enumeration describing the available options.
-   *
-   * @return 		an enumeration of all the available options.
+   * 
+   * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
     Vector result = new Vector();
 
     result.addElement(new Option(
-	"\tSpecifies list of columns to Discretize. First"
-	+ " and last are valid indexes.\n"
-	+ "\t(default: first-last)",
-	"R", 1, "-R <col1,col2-col4,...>"));
+      "\tSpecifies list of columns to Discretize. First"
+        + " and last are valid indexes.\n"
+        + "\t(default: first-last)",
+      "R", 1, "-R <col1,col2-col4,...>"));
 
     result.addElement(new Option(
-	"\tInvert matching sense of column indexes.",
-	"V", 0, "-V"));
+      "\tInvert matching sense of column indexes.",
+      "V", 0, "-V"));
 
     return result.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
+   * Parses a given list of options.
+   * <p/>
    * 
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -R <col1,col2-col4,...>
+   * <pre>
+   * -R <col1,col2-col4,...>
    *  Specifies list of columns to Discretize. First and last are valid indexes.
-   *  (default: first-last)</pre>
+   *  (default: first-last)
+   * </pre>
+   * 
+   * <pre>
+   * -V
+   *  Invert matching sense of column indexes.
+   * </pre>
    * 
-   * <pre> -V
-   *  Invert matching sense of column indexes.</pre>
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
-    String	tmpStr;
+    String tmpStr;
 
     super.setOptions(options);
-    
+
     setInvertSelection(Utils.getFlag('V', options));
 
     tmpStr = Utils.getOption('R', options);
-    if (tmpStr.length() != 0)
+    if (tmpStr.length() != 0) {
       setAttributeIndices(tmpStr);
-    else
+    } else {
       setAttributeIndices(m_DefaultCols);
+    }
 
-    if (getInputFormat() != null)
+    if (getInputFormat() != null) {
       setInputFormat(getInputFormat());
+    }
   }
 
   /**
    * Gets the current settings of the filter.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
+  @Override
   public String[] getOptions() {
-    int       i;
-    Vector    result;
-    String[]  options;
+    int i;
+    Vector result;
+    String[] options;
 
     result = new Vector();
     options = super.getOptions();
-    for (i = 0; i < options.length; i++)
+    for (i = 0; i < options.length; i++) {
       result.add(options[i]);
+    }
 
     if (!getAttributeIndices().equals("")) {
       result.add("-R");
       result.add(getAttributeIndices());
     }
 
-    if (getInvertSelection())
+    if (getInvertSelection()) {
       result.add("-V");
+    }
 
-    return (String[]) result.toArray(new String[result.size()]);	  
+    return (String[]) result.toArray(new String[result.size()]);
   }
 
   /**
    * Returns the tip text for this property
-   *
-   * @return 		tip text for this property suitable for
-   * 			displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String invertSelectionTipText() {
-    return 
-        "Set attribute selection mode. If false, only selected"
+    return
+    "Set attribute selection mode. If false, only selected"
       + " (numeric) attributes in the range will be 'nominalized'; if"
       + " true, only non-selected attributes will be 'nominalized'.";
   }
 
   /**
    * Gets whether the supplied columns are to be worked on or the others.
-   *
-   * @return 		true if the supplied columns will be worked on
+   * 
+   * @return true if the supplied columns will be worked on
    */
   public boolean getInvertSelection() {
     return m_Cols.getInvert();
@@ -196,10 +216,10 @@ public class NumericToNominal
 
   /**
    * Sets whether selected columns should be worked on or all the others apart
-   * from these. If true all the other columns are considered for 
+   * from these. If true all the other columns are considered for
    * "nominalization".
-   *
-   * @param value 	the new invert setting
+   * 
+   * @param value the new invert setting
    */
   public void setInvertSelection(boolean value) {
     m_Cols.setInvert(value);
@@ -207,9 +227,9 @@ public class NumericToNominal
 
   /**
    * Returns the tip text for this property
-   *
-   * @return 		tip text for this property suitable for
-   * 			displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String attributeIndicesTipText() {
     return "Specify range of attributes to act on."
@@ -220,21 +240,21 @@ public class NumericToNominal
 
   /**
    * Gets the current range selection
-   *
-   * @return 		a string containing a comma separated list of ranges
+   * 
+   * @return a string containing a comma separated list of ranges
    */
   public String getAttributeIndices() {
     return m_Cols.getRanges();
   }
 
   /**
-   * Sets which attributes are to be "nominalized" (only numeric
-   * attributes among the selection will be transformed).
-   *
-   * @param value 	a string representing the list of attributes. Since
-   * 			the string will typically come from a user, attributes 
-   * 			are indexed from 1. <br> eg: first-3,5,6-last
-   * @throws IllegalArgumentException if an invalid range list is supplied 
+   * Sets which attributes are to be "nominalized" (only numeric attributes
+   * among the selection will be transformed).
+   * 
+   * @param value a string representing the list of attributes. Since the string
+   *          will typically come from a user, attributes are indexed from 1. <br>
+   *          eg: first-3,5,6-last
+   * @throws IllegalArgumentException if an invalid range list is supplied
    */
   public void setAttributeIndices(String value) {
     m_Cols.setRanges(value);
@@ -243,22 +263,23 @@ public class NumericToNominal
   /**
    * Sets which attributes are to be transoformed to nominal. (only numeric
    * attributes among the selection will be transformed).
-   *
-   * @param value 	an array containing indexes of attributes to nominalize.
-   * 			Since the array will typically come from a program, 
-   * 			attributes are indexed from 0.
-   * @throws IllegalArgumentException if an invalid set of ranges is supplied 
+   * 
+   * @param value an array containing indexes of attributes to nominalize. Since
+   *          the array will typically come from a program, attributes are
+   *          indexed from 0.
+   * @throws IllegalArgumentException if an invalid set of ranges is supplied
    */
   public void setAttributeIndicesArray(int[] value) {
     setAttributeIndices(Range.indicesToRangeList(value));
   }
 
-  /** 
+  /**
    * Returns the Capabilities of this filter.
-   *
-   * @return            the capabilities of this object
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this object
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
     result.disableAll();
@@ -266,165 +287,181 @@ public class NumericToNominal
     // attributes
     result.enableAllAttributes();
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enableAllClasses();
     result.enable(Capability.MISSING_CLASS_VALUES);
     result.enable(Capability.NO_CLASS);
-    
+
     return result;
   }
 
   /**
-   * Determines the output format based on the input format and returns 
-   * this. In case the output format cannot be returned immediately, i.e.,
-   * immediateOutputFormat() returns false, then this method will be called
-   * from batchFinished().
-   *
-   * @param inputFormat     the input format to base the output format on
-   * @return                the output format
-   * @throws Exception      in case the determination goes wrong
-   * @see   #hasImmediateOutputFormat()
-   * @see   #batchFinished()
+   * Determines the output format based on the input format and returns this. In
+   * case the output format cannot be returned immediately, i.e.,
+   * immediateOutputFormat() returns false, then this method will be called from
+   * batchFinished().
+   * 
+   * @param inputFormat the input format to base the output format on
+   * @return the output format
+   * @throws Exception in case the determination goes wrong
+   * @see #hasImmediateOutputFormat()
+   * @see #batchFinished()
    */
+  @Override
   protected Instances determineOutputFormat(Instances inputFormat)
-      throws Exception {
-    
-    Instances 	data;
-    Instances	result;
-    FastVector	atts;
-    FastVector	values;
-    HashSet	hash;
-    int		i;
-    int		n;
-    boolean	isDate;
-    Instance	inst;
-    Vector	sorted;
+    throws Exception {
+
+    Instances data;
+    Instances result;
+    FastVector atts;
+    FastVector values;
+    HashSet hash;
+    int i;
+    int n;
+    boolean isDate;
+    Instance inst;
+    Vector sorted;
 
     m_Cols.setUpper(inputFormat.numAttributes() - 1);
     data = new Instances(inputFormat);
     atts = new FastVector();
     for (i = 0; i < data.numAttributes(); i++) {
       if (!m_Cols.isInRange(i) || !data.attribute(i).isNumeric()) {
-	atts.addElement(data.attribute(i));
-	continue;
+        atts.addElement(data.attribute(i));
+        continue;
       }
-      
+
       // date attribute?
       isDate = (data.attribute(i).type() == Attribute.DATE);
-      
+
       // determine all available attribtues in dataset
-      hash   = new HashSet();
+      hash = new HashSet();
       for (n = 0; n < data.numInstances(); n++) {
-	inst = data.instance(n);
-	if (inst.isMissing(i))
-	  continue;
-	
-	if (isDate)
-	  hash.add(inst.stringValue(i));
-	else
-	  hash.add(new Double(inst.value(i)));
+        inst = data.instance(n);
+        if (inst.isMissing(i)) {
+          continue;
+        }
+
+        if (isDate) {
+          hash.add(inst.stringValue(i));
+        } else {
+          hash.add(new Double(inst.value(i)));
+        }
       }
-      
+
       // sort values
       sorted = new Vector();
-      for (Object o: hash)
-	sorted.add(o);
+      for (Object o : hash) {
+        sorted.add(o);
+      }
       Collections.sort(sorted);
-      
+
       // create attribute from sorted values
       values = new FastVector();
-      for (Object o: sorted) {
-	if (isDate)
-	  values.addElement(
-	      o.toString());
-	else
-	  values.addElement(
-	      Utils.doubleToString(((Double) o).doubleValue(), MAX_DECIMALS));
+      for (Object o : sorted) {
+        if (isDate) {
+          values.addElement(
+            o.toString());
+        } else {
+          values.addElement(
+            Utils.doubleToString(((Double) o).doubleValue(), MAX_DECIMALS));
+        }
       }
       Attribute newAtt = new Attribute(data.attribute(i).name(), values);
       newAtt.setWeight(data.attribute(i).weight());
       atts.addElement(newAtt);
     }
-    
+
     result = new Instances(inputFormat.relationName(), atts, 0);
     result.setClassIndex(inputFormat.classIndex());
-    
+
     return result;
   }
 
   /**
-   * Processes the given data (may change the provided dataset) and returns
-   * the modified version. This method is called in batchFinished().
-   *
-   * @param instances   the data to process
-   * @return            the modified data
-   * @throws Exception  in case the processing goes wrong
-   * @see               #batchFinished()
+   * Processes the given data (may change the provided dataset) and returns the
+   * modified version. This method is called in batchFinished().
+   * 
+   * @param instances the data to process
+   * @return the modified data
+   * @throws Exception in case the processing goes wrong
+   * @see #batchFinished()
    */
+  @Override
   protected Instances process(Instances instances) throws Exception {
-    Instances	result;
-    int		i;
-    int		n;
-    double[]	values;
-    String	value;
-    Instance	inst;
-    Instance	newInst;
-    
+    Instances result;
+    int i;
+    int n;
+    double[] values;
+    String value;
+    Instance inst;
+    Instance newInst;
+
     // we need the complete input data!
-    if (!isFirstBatchDone())
+    if (!isFirstBatchDone()) {
       setOutputFormat(determineOutputFormat(getInputFormat()));
-    
+    }
+
     result = new Instances(getOutputFormat());
-    
+
     for (i = 0; i < instances.numInstances(); i++) {
-      inst   = instances.instance(i);
+      inst = instances.instance(i);
       values = inst.toDoubleArray();
-      
+
       for (n = 0; n < values.length; n++) {
-	if (    !m_Cols.isInRange(n)
-	     || !instances.attribute(n).isNumeric() 
-	     || inst.isMissing(n) )
-	  continue;
-
-	// get index of value
-	if (instances.attribute(n).type() == Attribute.DATE)
-	  value = inst.stringValue(n);
-	else
-	  value = Utils.doubleToString(inst.value(n), MAX_DECIMALS);
-	
-	values[n] = result.attribute(n).indexOfValue(value);
+        if (!m_Cols.isInRange(n)
+          || !instances.attribute(n).isNumeric()
+          || inst.isMissing(n)) {
+          continue;
+        }
+
+        // get index of value
+        if (instances.attribute(n).type() == Attribute.DATE) {
+          value = inst.stringValue(n);
+        } else {
+          value = Utils.doubleToString(inst.value(n), MAX_DECIMALS);
+        }
+
+        int index = result.attribute(n).indexOfValue(value);
+        if (index == -1) {
+          values[n] = Instance.missingValue();
+        } else {
+          values[n] = index;
+        }
       }
-      
+
       // generate new instance
-      if (inst instanceof SparseInstance)
-	newInst = new SparseInstance(inst.weight(), values);
-      else
-	newInst = new Instance(inst.weight(), values);
-      
+      if (inst instanceof SparseInstance) {
+        newInst = new SparseInstance(inst.weight(), values);
+      } else {
+        newInst = new Instance(inst.weight(), values);
+      }
+
       // copy possible string, relational values
       newInst.setDataset(getOutputFormat());
       copyValues(newInst, false, inst.dataset(), getOutputFormat());
-      
+
       result.add(newInst);
     }
-    
+
     return result;
   }
-  
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 8576 $");
+    return RevisionUtils.extract("$Revision: 10988 $");
   }
 
   /**
    * Runs the filter with the given parameters. Use -h to list options.
    * 
-   * @param args	the commandline options
+   * @param args the commandline options
    */
   public static void main(String[] args) {
     runFilter(new NumericToNominal(), args);
diff --git a/src/main/java/weka/filters/unsupervised/attribute/RandomProjection.java b/src/main/java/weka/filters/unsupervised/attribute/RandomProjection.java
index a3a254b..2bd30f7 100644
--- a/src/main/java/weka/filters/unsupervised/attribute/RandomProjection.java
+++ b/src/main/java/weka/filters/unsupervised/attribute/RandomProjection.java
@@ -22,8 +22,13 @@
 
 package weka.filters.unsupervised.attribute;
 
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.Vector;
+
 import weka.core.Attribute;
 import weka.core.Capabilities;
+import weka.core.Capabilities.Capability;
 import weka.core.FastVector;
 import weka.core.Instance;
 import weka.core.Instances;
@@ -33,31 +38,33 @@ import weka.core.RevisionUtils;
 import weka.core.SelectedTag;
 import weka.core.Tag;
 import weka.core.TechnicalInformation;
-import weka.core.TechnicalInformationHandler;
-import weka.core.Utils;
-import weka.core.Capabilities.Capability;
 import weka.core.TechnicalInformation.Field;
 import weka.core.TechnicalInformation.Type;
+import weka.core.TechnicalInformationHandler;
+import weka.core.Utils;
 import weka.filters.Filter;
 import weka.filters.UnsupervisedFilter;
 
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.Vector;
-
-/** 
- <!-- globalinfo-start -->
- * Reduces the dimensionality of the data by projecting it onto a lower dimensional subspace using a random matrix with columns of unit length (i.e. It will reduce the number of attributes in the data while preserving much of its variation like PCA, but at a much less computational cost).<br/>
- * It first applies the  NominalToBinary filter to convert all attributes to numeric before reducing the dimension. It preserves the class attribute.<br/>
+/**
+ * <!-- globalinfo-start --> Reduces the dimensionality of the data by
+ * projecting it onto a lower dimensional subspace using a random matrix with
+ * columns of unit length (i.e. It will reduce the number of attributes in the
+ * data while preserving much of its variation like PCA, but at a much less
+ * computational cost).<br/>
+ * It first applies the NominalToBinary filter to convert all attributes to
+ * numeric before reducing the dimension. It preserves the class attribute.<br/>
  * <br/>
  * For more information, see:<br/>
  * <br/>
- * Dmitriy Fradkin, David Madigan: Experiments with random projections for machine learning. In: KDD '03: Proceedings of the ninth ACM SIGKDD international conference on Knowledge discovery and data mining, New York, NY, USA, 517-522, 003.
+ * Dmitriy Fradkin, David Madigan: Experiments with random projections for
+ * machine learning. In: KDD '03: Proceedings of the ninth ACM SIGKDD
+ * international conference on Knowledge discovery and data mining, New York,
+ * NY, USA, 517-522, 003.
  * <p/>
- <!-- globalinfo-end -->
+ * <!-- globalinfo-end -->
+ * 
+ * <!-- technical-bibtex-start --> BibTeX:
  * 
- <!-- technical-bibtex-start -->
- * BibTeX:
  * <pre>
  * @inproceedings{Fradkin003,
  *    address = {New York, NY, USA},
@@ -70,16 +77,19 @@ import java.util.Vector;
  * }
  * </pre>
  * <p/>
- <!-- technical-bibtex-end -->
- *
- <!-- options-start -->
- * Valid options are: <p/>
+ * <!-- technical-bibtex-end -->
  * 
- * <pre> -N <number>
+ * <!-- options-start --> Valid options are:
+ * <p/>
+ * 
+ * <pre>
+ * -N <number>
  *  The number of dimensions (attributes) the data should be reduced to
- *  (default 10; exclusive of the class attribute, if it is set).</pre>
+ *  (default 10; exclusive of the class attribute, if it is set).
+ * </pre>
  * 
- * <pre> -D [SPARSE1|SPARSE2|GAUSSIAN]
+ * <pre>
+ * -D [SPARSE1|SPARSE2|GAUSSIAN]
  *  The distribution to use for calculating the random matrix.
  *  Sparse1 is:
  *    sqrt(3)*{-1 with prob(1/6), 0 with prob(2/3), +1 with prob(1/6)}
@@ -87,27 +97,33 @@ import java.util.Vector;
  *    {-1 with prob(1/2), +1 with prob(1/2)}
  * </pre>
  * 
- * <pre> -P <percent>
+ * <pre>
+ * -P <percent>
  *  The percentage of dimensions (attributes) the data should
  *  be reduced to (exclusive of the class attribute, if it is set). This -N
- *  option is ignored if this option is present or is greater
- *  than zero.</pre>
+ *  option is ignored if this option is present and is greater
+ *  than zero.
+ * </pre>
  * 
- * <pre> -M
- *  Replace missing values using the ReplaceMissingValues filter</pre>
+ * <pre>
+ * -M
+ *  Replace missing values using the ReplaceMissingValues filter
+ * </pre>
  * 
- * <pre> -R <num>
+ * <pre>
+ * -R <num>
  *  The random seed for the random number generator used for
- *  calculating the random matrix (default 42).</pre>
+ *  calculating the random matrix (default 42).
+ * </pre>
  * 
- <!-- options-end -->
- *
- * @author Ashraf M. Kibriya (amk14 at cs.waikato.ac.nz) 
- * @version $Revision: 10029 $ [1.0 - 22 July 2003 - Initial version (Ashraf M. Kibriya)]
+ * <!-- options-end -->
+ * 
+ * @author Ashraf M. Kibriya (amk14 at cs.waikato.ac.nz)
+ * @version $Revision: 10832 $ [1.0 - 22 July 2003 - Initial version (Ashraf M.
+ *          Kibriya)]
  */
-public class RandomProjection 
-  extends Filter 
-  implements UnsupervisedFilter, OptionHandler, TechnicalInformationHandler {
+public class RandomProjection extends Filter implements UnsupervisedFilter,
+  OptionHandler, TechnicalInformationHandler {
 
   /** for serialization */
   static final long serialVersionUID = 4428905532728645880L;
@@ -115,11 +131,15 @@ public class RandomProjection
   /** Stores the number of dimensions to reduce the data to */
   protected int m_k = 10;
 
-  /** Stores the dimensionality the data should be reduced to as percentage of the original dimension */
+  /**
+   * Stores the dimensionality the data should be reduced to as percentage of
+   * the original dimension
+   */
   protected double m_percent = 0.0;
 
-  /** Is the random matrix will be computed using 
-      Gaussian distribution or not */
+  /**
+   * Is the random matrix will be computed using Gaussian distribution or not
+   */
   protected boolean m_useGaussian = false;
 
   /** distribution type: sparse 1 */
@@ -129,31 +149,34 @@ public class RandomProjection
   /** distribution type: gaussian */
   public static final int GAUSSIAN = 3;
 
-  /** The types of distributions that can be used for 
-  calculating the random matrix */
-  public static final Tag [] TAGS_DSTRS_TYPE = {
-    new Tag(SPARSE1, "Sparse1"),
-    new Tag(SPARSE2, "Sparse2"),
-    new Tag(GAUSSIAN, "Gaussian"),
-  };
+  /**
+   * The types of distributions that can be used for calculating the random
+   * matrix
+   */
+  public static final Tag[] TAGS_DSTRS_TYPE = { new Tag(SPARSE1, "Sparse1"),
+    new Tag(SPARSE2, "Sparse2"), new Tag(GAUSSIAN, "Gaussian"), };
 
-  /** Stores the distribution to use for calculating the
-      random matrix */
+  /**
+   * Stores the distribution to use for calculating the random matrix
+   */
   protected int m_distribution = SPARSE1;
- 
-  /** Should the missing values be replaced using 
-      unsupervised.ReplaceMissingValues filter */
+
+  /**
+   * Should the missing values be replaced using
+   * unsupervised.ReplaceMissingValues filter
+   */
   protected boolean m_useReplaceMissing = false;
 
   /** Keeps track of output format if it is defined or not */
   protected boolean m_OutputFormatDefined = false;
 
   /** The NominalToBinary filter applied to the data before this filter */
-  protected Filter m_ntob; // = new weka.filters.unsupervised.attribute.NominalToBinary();
+  protected Filter m_ntob; // = new
+                           // weka.filters.unsupervised.attribute.NominalToBinary();
 
   /** The ReplaceMissingValues filter */
   protected Filter m_replaceMissing;
-    
+
   /** Stores the random seed used to generate the random matrix */
   protected long m_rndmSeed = 42;
 
@@ -165,60 +188,64 @@ public class RandomProjection
 
   /**
    * Returns an enumeration describing the available options.
-   *
+   * 
    * @return an enumeration of all the available options.
    */
+  @Override
   public Enumeration listOptions() {
 
     Vector newVector = new Vector(2);
 
     newVector.addElement(new Option(
-	      "\tThe number of dimensions (attributes) the data should be reduced to\n"
-             +"\t(default 10; exclusive of the class attribute, if it is set).",
-	      "N", 1, "-N <number>"));
-
-    newVector.addElement(new Option(
-	      "\tThe distribution to use for calculating the random matrix.\n"
-	     +"\tSparse1 is:\n"
-	     +"\t  sqrt(3)*{-1 with prob(1/6), 0 with prob(2/3), +1 with prob(1/6)}\n"
-	     +"\tSparse2 is:\n"
-	     +"\t  {-1 with prob(1/2), +1 with prob(1/2)}\n",
-	      "D", 1, "-D [SPARSE1|SPARSE2|GAUSSIAN]"));
-
-    //newVector.addElement(new Option(
-    //	      "\tUse Gaussian distribution for calculating the random matrix.",
-    //	      "G", 0, "-G"));
+      "\tThe number of dimensions (attributes) the data should be reduced to\n"
+        + "\t(default 10; exclusive of the class attribute, if it is set).",
+      "N", 1, "-N <number>"));
+
+    newVector
+      .addElement(new Option(
+        "\tThe distribution to use for calculating the random matrix.\n"
+          + "\tSparse1 is:\n"
+          + "\t  sqrt(3)*{-1 with prob(1/6), 0 with prob(2/3), +1 with prob(1/6)}\n"
+          + "\tSparse2 is:\n" + "\t  {-1 with prob(1/2), +1 with prob(1/2)}\n",
+        "D", 1, "-D [SPARSE1|SPARSE2|GAUSSIAN]"));
+
+    // newVector.addElement(new Option(
+    // "\tUse Gaussian distribution for calculating the random matrix.",
+    // "G", 0, "-G"));
+
+    newVector
+      .addElement(new Option(
+        "\tThe percentage of dimensions (attributes) the data should\n"
+          + "\tbe reduced to (exclusive of the class attribute, if it is set). This -N\n"
+          + "\toption is ignored if this option is present or is greater\n"
+          + "\tthan zero.", "P", 1, "-P <percent>"));
 
     newVector.addElement(new Option(
-	      "\tThe percentage of dimensions (attributes) the data should\n"
-	     +"\tbe reduced to (exclusive of the class attribute, if it is set). This -N\n"
-	     +"\toption is ignored if this option is present or is greater\n"
-	     +"\tthan zero.",
-	      "P", 1, "-P <percent>"));
+      "\tReplace missing values using the ReplaceMissingValues filter", "M", 0,
+      "-M"));
 
     newVector.addElement(new Option(
-	      "\tReplace missing values using the ReplaceMissingValues filter",
-	      "M", 0, "-M"));
+      "\tThe random seed for the random number generator used for\n"
+        + "\tcalculating the random matrix (default 42).", "R", 0, "-R <num>"));
 
-    newVector.addElement(new Option(
-	      "\tThe random seed for the random number generator used for\n"
-	     +"\tcalculating the random matrix (default 42).",
-	      "R", 0, "-R <num>"));
- 
     return newVector.elements();
   }
 
   /**
-   * Parses a given list of options. <p/>
+   * Parses a given list of options.
+   * <p/>
    * 
-   <!-- options-start -->
-   * Valid options are: <p/>
+   * <!-- options-start --> Valid options are:
+   * <p/>
    * 
-   * <pre> -N <number>
+   * <pre>
+   * -N <number>
    *  The number of dimensions (attributes) the data should be reduced to
-   *  (default 10; exclusive of the class attribute, if it is set).</pre>
+   *  (default 10; exclusive of the class attribute, if it is set).
+   * </pre>
    * 
-   * <pre> -D [SPARSE1|SPARSE2|GAUSSIAN]
+   * <pre>
+   * -D [SPARSE1|SPARSE2|GAUSSIAN]
    *  The distribution to use for calculating the random matrix.
    *  Sparse1 is:
    *    sqrt(3)*{-1 with prob(1/6), 0 with prob(2/3), +1 with prob(1/6)}
@@ -226,101 +253,109 @@ public class RandomProjection
    *    {-1 with prob(1/2), +1 with prob(1/2)}
    * </pre>
    * 
-   * <pre> -P <percent>
+   * <pre>
+   * -P <percent>
    *  The percentage of dimensions (attributes) the data should
    *  be reduced to (exclusive of the class attribute, if it is set). This -N
-   *  option is ignored if this option is present or is greater
-   *  than zero.</pre>
+   *  option is ignored if this option is present and is greater
+   *  than zero.
+   * </pre>
    * 
-   * <pre> -M
-   *  Replace missing values using the ReplaceMissingValues filter</pre>
+   * <pre>
+   * -M
+   *  Replace missing values using the ReplaceMissingValues filter
+   * </pre>
    * 
-   * <pre> -R <num>
+   * <pre>
+   * -R <num>
    *  The random seed for the random number generator used for
-   *  calculating the random matrix (default 42).</pre>
+   *  calculating the random matrix (default 42).
+   * </pre>
+   * 
+   * <!-- options-end -->
    * 
-   <!-- options-end -->
-   *
    * @param options the list of options as an array of strings
    * @throws Exception if an option is not supported
    */
+  @Override
   public void setOptions(String[] options) throws Exception {
 
-
     String mString = Utils.getOption('P', options);
     if (mString.length() != 0) {
-	setPercent((double) Double.parseDouble(mString)); //setNumberOfAttributes((int) Integer.parseInt(mString));
+      setPercent(Double.parseDouble(mString)); // setNumberOfAttributes((int)
+                                               // Integer.parseInt(mString));
     } else {
-        setPercent(0);
-	mString = Utils.getOption('N', options);
-	if (mString.length() != 0) 
-	    setNumberOfAttributes(Integer.parseInt(mString));	    
-	else	    
-	    setNumberOfAttributes(10);
-    }    
-    
+      setPercent(0);
+      mString = Utils.getOption('N', options);
+      if (mString.length() != 0) {
+        setNumberOfAttributes(Integer.parseInt(mString));
+      } else {
+        setNumberOfAttributes(10);
+      }
+    }
+
     mString = Utils.getOption('R', options);
-    if(mString.length()!=0) {
-	setRandomSeed( Long.parseLong(mString) );
+    if (mString.length() != 0) {
+      setRandomSeed(Long.parseLong(mString));
     }
 
     mString = Utils.getOption('D', options);
-    if(mString.length()!=0) {
-	if(mString.equalsIgnoreCase("sparse1"))
-	   setDistribution( new SelectedTag(SPARSE1, TAGS_DSTRS_TYPE) );
-	else if(mString.equalsIgnoreCase("sparse2"))
-	   setDistribution( new SelectedTag(SPARSE2, TAGS_DSTRS_TYPE) );
-	else if(mString.equalsIgnoreCase("gaussian"))
-	   setDistribution( new SelectedTag(GAUSSIAN, TAGS_DSTRS_TYPE) );	   
+    if (mString.length() != 0) {
+      if (mString.equalsIgnoreCase("sparse1")) {
+        setDistribution(new SelectedTag(SPARSE1, TAGS_DSTRS_TYPE));
+      } else if (mString.equalsIgnoreCase("sparse2")) {
+        setDistribution(new SelectedTag(SPARSE2, TAGS_DSTRS_TYPE));
+      } else if (mString.equalsIgnoreCase("gaussian")) {
+        setDistribution(new SelectedTag(GAUSSIAN, TAGS_DSTRS_TYPE));
+      }
     }
 
-    if(Utils.getFlag('M', options))
-	setReplaceMissingValues(true);
-    else
-	setReplaceMissingValues(false);
+    if (Utils.getFlag('M', options)) {
+      setReplaceMissingValues(true);
+    } else {
+      setReplaceMissingValues(false);
+    }
 
+    // if(Utils.getFlag('G', options))
+    // setUseGaussian(true);
+    // else
+    // setUseGaussian(false);
 
-   //if(Utils.getFlag('G', options))
-   //    setUseGaussian(true);
-   //else
-   //    setUseGaussian(false);
-    
   }
 
   /**
    * Gets the current settings of the filter.
-   *
+   * 
    * @return an array of strings suitable for passing to setOptions
    */
-  public String [] getOptions() {
+  @Override
+  public String[] getOptions() {
 
-    String [] options = new String [10];
+    String[] options = new String[10];
     int current = 0;
 
-    //if (getUseGaussian()) {
-    //  options[current++] = "-G";
-    //}
+    // if (getUseGaussian()) {
+    // options[current++] = "-G";
+    // }
 
     if (getReplaceMissingValues()) {
       options[current++] = "-M";
     }
 
-    if (getPercent() == 0) {
+    if (getPercent() <= 0) {
       options[current++] = "-N";
       options[current++] = "" + getNumberOfAttributes();
-    }
-    else {
+    } else {
       options[current++] = "-P";
       options[current++] = "" + getPercent();
     }
-    
+
     options[current++] = "-R";
     options[current++] = "" + getRandomSeed();
-    
+
     SelectedTag t = getDistribution();
     options[current++] = "-D";
-    options[current++] = ""+t.getSelectedTag().getReadable();
-
+    options[current++] = "" + t.getSelectedTag().getReadable();
 
     while (current < options.length) {
       options[current++] = "";
@@ -328,223 +363,224 @@ public class RandomProjection
 
     return options;
   }
-    
-   
+
   /**
    * Returns a string describing this filter
-   *
-   * @return a description of the filter suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return a description of the filter suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String globalInfo() {
 
     return "Reduces the dimensionality of the data by projecting"
-	 + " it onto a lower dimensional subspace using a random"
-	 + " matrix with columns of unit length (i.e. It will reduce"
-	 + " the number of attributes in the data while preserving"
-	 + " much of its variation like PCA, but at a much less"
-	 + " computational cost).\n"
-	 + "It first applies the  NominalToBinary filter to" 
-	 + " convert all attributes to numeric before reducing the"
-	 + " dimension. It preserves the class attribute.\n\n"
-	 + "For more information, see:\n\n"
-	 + getTechnicalInformation().toString();
+      + " it onto a lower dimensional subspace using a random"
+      + " matrix with columns of unit length (i.e. It will reduce"
+      + " the number of attributes in the data while preserving"
+      + " much of its variation like PCA, but at a much less"
+      + " computational cost).\n"
+      + "It first applies the  NominalToBinary filter to"
+      + " convert all attributes to numeric before reducing the"
+      + " dimension. It preserves the class attribute.\n\n"
+      + "For more information, see:\n\n" + getTechnicalInformation().toString();
   }
 
   /**
-   * Returns an instance of a TechnicalInformation object, containing 
-   * detailed information about the technical background of this class,
-   * e.g., paper reference or book this class is based on.
+   * Returns an instance of a TechnicalInformation object, containing detailed
+   * information about the technical background of this class, e.g., paper
+   * reference or book this class is based on.
    * 
    * @return the technical information about this class
    */
+  @Override
   public TechnicalInformation getTechnicalInformation() {
-    TechnicalInformation 	result;
-    
+    TechnicalInformation result;
+
     result = new TechnicalInformation(Type.INPROCEEDINGS);
     result.setValue(Field.AUTHOR, "Dmitriy Fradkin and David Madigan");
-    result.setValue(Field.TITLE, "Experiments with random projections for machine learning");
-    result.setValue(Field.BOOKTITLE, "KDD '03: Proceedings of the ninth ACM SIGKDD international conference on Knowledge discovery and data mining");
+    result.setValue(Field.TITLE,
+      "Experiments with random projections for machine learning");
+    result
+      .setValue(
+        Field.BOOKTITLE,
+        "KDD '03: Proceedings of the ninth ACM SIGKDD international conference on Knowledge discovery and data mining");
     result.setValue(Field.YEAR, "003");
     result.setValue(Field.PAGES, "517-522");
     result.setValue(Field.PUBLISHER, "ACM Press");
     result.setValue(Field.ADDRESS, "New York, NY, USA");
-    
+
     return result;
   }
 
   /**
    * Returns the tip text for this property
-   *
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String numberOfAttributesTipText() {
 
     return "The number of dimensions (attributes) the data should"
-         + " be reduced to.";
+      + " be reduced to.";
   }
 
-  /** 
+  /**
    * Sets the number of attributes (dimensions) the data should be reduced to
    * 
    * @param newAttNum the goal for the dimensions
    */
   public void setNumberOfAttributes(int newAttNum) {
-      m_k = newAttNum;
+    m_k = newAttNum;
   }
-  
-  /** 
-   * Gets the current number of attributes (dimensionality) to which the data 
+
+  /**
+   * Gets the current number of attributes (dimensionality) to which the data
    * will be reduced to.
-   *  
+   * 
    * @return the number of dimensions
    */
   public int getNumberOfAttributes() {
-      return m_k;
+    return m_k;
   }
 
   /**
    * Returns the tip text for this property
-   *
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String percentTipText() {
 
-      return  " The percentage of dimensions (attributes) the data should"
-            + " be reduced to  (inclusive of the class attribute). This "
-	    + " NumberOfAttributes option is ignored if this option is"
-	    + " present or is greater than zero.";
+    return " The percentage of dimensions (attributes) the data should"
+      + " be reduced to  (inclusive of the class attribute). This "
+      + " NumberOfAttributes option is ignored if this option is"
+      + " present or is greater than zero.";
   }
 
-  /** 
-   * Sets the percent the attributes (dimensions) of the data should be reduced to
+  /**
+   * Sets the percent the attributes (dimensions) of the data should be reduced
+   * to
    * 
    * @param newPercent the percentage of attributes
    */
   public void setPercent(double newPercent) {
-      if(newPercent > 0)
-	  newPercent /= 100;
-      m_percent = newPercent;
+    if (newPercent > 0) {
+      newPercent /= 100;
+    }
+    m_percent = newPercent;
   }
 
-  /** 
+  /**
    * Gets the percent the attributes (dimensions) of the data will be reduced to
    * 
    * @return the percentage of attributes
    */
   public double getPercent() {
-      return m_percent * 100;
+    return m_percent * 100;
   }
 
-
   /**
    * Returns the tip text for this property
-   *
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String randomSeedTipText() {
-      return  "The random seed used by the random"
-	     +" number generator used for generating"
-	     +" the random matrix ";
+    return "The random seed used by the random"
+      + " number generator used for generating" + " the random matrix ";
   }
 
-  /** 
+  /**
    * Sets the random seed of the random number generator
    * 
    * @param seed the random seed value
    */
   public void setRandomSeed(long seed) {
-      m_rndmSeed = seed;
+    m_rndmSeed = seed;
   }
 
-  /** 
+  /**
    * Gets the random seed of the random number generator
    * 
    * @return the random seed value
    */
   public long getRandomSeed() {
-      return m_rndmSeed;
+    return m_rndmSeed;
   }
 
-
   /**
    * Returns the tip text for this property
-   *
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
-   */
-  public String  distributionTipText() {
-      return "The distribution to use for calculating the random matrix.\n"
-	    +"Sparse1 is:\n"
-	    +" sqrt(3) * { -1 with prob(1/6), \n"
-	    +"               0 with prob(2/3),  \n"
-            +"              +1 with prob(1/6) } \n"
-	    +"Sparse2 is:\n"
-	    +" { -1 with prob(1/2), \n"
-	    +"   +1 with prob(1/2) } ";
-      
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
+   */
+  public String distributionTipText() {
+    return "The distribution to use for calculating the random matrix.\n"
+      + "Sparse1 is:\n" + " sqrt(3) * { -1 with prob(1/6), \n"
+      + "               0 with prob(2/3),  \n"
+      + "              +1 with prob(1/6) } \n" + "Sparse2 is:\n"
+      + " { -1 with prob(1/2), \n" + "   +1 with prob(1/2) } ";
+
   }
-  /** 
+
+  /**
    * Sets the distribution to use for calculating the random matrix
    * 
    * @param newDstr the distribution to use
    */
   public void setDistribution(SelectedTag newDstr) {
 
-      if (newDstr.getTags() == TAGS_DSTRS_TYPE) {
-	  m_distribution = newDstr.getSelectedTag().getID();
-      }
+    if (newDstr.getTags() == TAGS_DSTRS_TYPE) {
+      m_distribution = newDstr.getSelectedTag().getID();
+    }
   }
 
-  /** 
-   * Returns the current distribution that'll be used for calculating the 
-   * random matrix
+  /**
+   * Returns the current distribution that'll be used for calculating the random
+   * matrix
    * 
    * @return the current distribution
    */
   public SelectedTag getDistribution() {
-      return new SelectedTag(m_distribution, TAGS_DSTRS_TYPE);
+    return new SelectedTag(m_distribution, TAGS_DSTRS_TYPE);
   }
 
   /**
    * Returns the tip text for this property
-   *
-   * @return tip text for this property suitable for
-   * displaying in the explorer/experimenter gui
+   * 
+   * @return tip text for this property suitable for displaying in the
+   *         explorer/experimenter gui
    */
   public String replaceMissingValuesTipText() {
 
     return "If set the filter uses weka.filters.unsupervised.attribute.ReplaceMissingValues"
-	 + " to replace the missing values";
+      + " to replace the missing values";
   }
 
-  /** 
+  /**
    * Sets either to use replace missing values filter or not
    * 
    * @param t if true then the replace missing values is used
    */
   public void setReplaceMissingValues(boolean t) {
-      m_useReplaceMissing = t;
+    m_useReplaceMissing = t;
   }
 
-  /** 
+  /**
    * Gets the current setting for using ReplaceMissingValues filter
    * 
    * @return true if the replace missing values filter is used
    */
   public boolean getReplaceMissingValues() {
-      return m_useReplaceMissing;
+    return m_useReplaceMissing;
   }
 
-  /** 
+  /**
    * Returns the Capabilities of this filter.
-   *
-   * @return            the capabilities of this object
-   * @see               Capabilities
+   * 
+   * @return the capabilities of this object
+   * @see Capabilities
    */
+  @Override
   public Capabilities getCapabilities() {
     Capabilities result = super.getCapabilities();
     result.disableAll();
@@ -552,286 +588,298 @@ public class RandomProjection
     // attributes
     result.enableAllAttributes();
     result.enable(Capability.MISSING_VALUES);
-    
+
     // class
     result.enableAllClasses();
     result.enable(Capability.MISSING_CLASS_VALUES);
     result.enable(Capability.NO_CLASS);
-    
+
     return result;
   }
 
   /**
    * Sets the format of the input instances.
-   *
-   * @param instanceInfo an Instances object containing the input 
-   * instance structure (any instances contained in the object are 
-   * ignored - only the structure is required).
+   * 
+   * @param instanceInfo an Instances object containing the input instance
+   *          structure (any instances contained in the object are ignored -
+   *          only the structure is required).
    * @return true if the outputFormat may be collected immediately
-   * @throws Exception if the input format can't be set 
-   * successfully
+   * @throws Exception if the input format can't be set successfully
    */
-  public boolean setInputFormat(Instances instanceInfo) throws Exception {      
+  @Override
+  public boolean setInputFormat(Instances instanceInfo) throws Exception {
     super.setInputFormat(instanceInfo);
     /*
-    if (instanceInfo.classIndex() < 0) {
-      throw new UnassignedClassException("No class has been assigned to the instances");
-    }
-    */
-    
-    for(int i=0; i<instanceInfo.numAttributes(); i++) {        
-	if( i!=instanceInfo.classIndex() && instanceInfo.attribute(i).isNominal() ) {
-            if(instanceInfo.classIndex()>=0)
-                m_ntob = new weka.filters.supervised.attribute.NominalToBinary();
-            else
-                m_ntob = new weka.filters.unsupervised.attribute.NominalToBinary();
-            
-            break;
-	}
-    }
+     * if (instanceInfo.classIndex() < 0) { throw new
+     * UnassignedClassException("No class has been assigned to the instances");
+     * }
+     */
+
+    for (int i = 0; i < instanceInfo.numAttributes(); i++) {
+      if (i != instanceInfo.classIndex()
+        && instanceInfo.attribute(i).isNominal()) {
+        if (instanceInfo.classIndex() >= 0) {
+          m_ntob = new weka.filters.supervised.attribute.NominalToBinary();
+        } else {
+          m_ntob = new weka.filters.unsupervised.attribute.NominalToBinary();
+        }
 
-    //r.setSeed(m_rndmSeed); //in case the setRandomSeed() is not
-                           //called we better set the seed to its 
-                           //default value of 42.
-    boolean temp=true;
-    if(m_replaceMissing!=null) {
-	m_replaceMissing = new weka.filters.unsupervised.attribute.ReplaceMissingValues();
-	if(m_replaceMissing.setInputFormat(instanceInfo))
-	    temp=true;
-	else
-	    temp=false;
+        break;
+      }
     }
-    
-    if(m_ntob!=null) {
-	if(m_ntob.setInputFormat(instanceInfo)) {
-	    setOutputFormat();
-	    return temp && true;
-	}
-	else { 
-	    return false;
-	}
+
+    // r.setSeed(m_rndmSeed); //in case the setRandomSeed() is not
+    // called we better set the seed to its
+    // default value of 42.
+    boolean temp = true;
+    if (m_replaceMissing != null) {
+      m_replaceMissing =
+        new weka.filters.unsupervised.attribute.ReplaceMissingValues();
+      if (m_replaceMissing.setInputFormat(instanceInfo)) {
+        temp = true;
+      } else {
+        temp = false;
+      }
     }
-    else {
-	setOutputFormat();
-	return temp && true;
+
+    if (m_ntob != null) {
+      if (m_ntob.setInputFormat(instanceInfo)) {
+        setOutputFormat();
+        return temp && true;
+      } else {
+        return false;
+      }
+    } else {
+      setOutputFormat();
+      return temp && true;
     }
   }
 
-   
   /**
    * Input an instance for filtering.
-   *
+   * 
    * @param instance the input instance
-   * @return true if the filtered instance may now be
-   * collected with output().
+   * @return true if the filtered instance may now be collected with output().
    * @throws IllegalStateException if no input format has been set
    */
+  @Override
   public boolean input(Instance instance) throws Exception {
 
-    Instance newInstance=null;
+    Instance newInstance = null;
 
-    if (getInputFormat()==null) {
-	throw new IllegalStateException("No input instance format defined");
+    if (getInputFormat() == null) {
+      throw new IllegalStateException("No input instance format defined");
     }
-    if(m_NewBatch) {
+    if (m_NewBatch) {
       resetQueue();
-      //if(ntob!=null) 
-      //	  ntob.m_NewBatch=true;
+      // if(ntob!=null)
+      // ntob.m_NewBatch=true;
       m_NewBatch = false;
     }
-    
-    boolean replaceDone=false;
-    if(m_replaceMissing!=null) {
-	if(m_replaceMissing.input(instance)) {
-	    if(m_OutputFormatDefined == false)
-		setOutputFormat();
-	    newInstance = m_replaceMissing.output();
-	    replaceDone = true;
-	}
-	else
-	    return false;;
-    }
 
-    if(m_ntob!=null) {
-	if(replaceDone==false)
-	    newInstance = instance;
-	if(m_ntob.input(newInstance)) {
-	    if(m_OutputFormatDefined == false) 
-		setOutputFormat();
-	    newInstance = m_ntob.output();
-	    newInstance = convertInstance(newInstance);
-	    push(newInstance);
-	    return true;	
-	}
-	else {
-	    return false;
-	}
+    boolean replaceDone = false;
+    if (m_replaceMissing != null) {
+      if (m_replaceMissing.input(instance)) {
+        if (m_OutputFormatDefined == false) {
+          setOutputFormat();
+        }
+        newInstance = m_replaceMissing.output();
+        replaceDone = true;
+      } else {
+        return false;
+      }
+      ;
     }
-    else {
-	if(replaceDone==false)
-	    newInstance = instance;
-	newInstance = convertInstance(newInstance);
-	push(newInstance);
-	return true;
+
+    if (m_ntob != null) {
+      if (replaceDone == false) {
+        newInstance = instance;
+      }
+      if (m_ntob.input(newInstance)) {
+        if (m_OutputFormatDefined == false) {
+          setOutputFormat();
+        }
+        newInstance = m_ntob.output();
+        newInstance = convertInstance(newInstance);
+        push(newInstance);
+        return true;
+      } else {
+        return false;
+      }
+    } else {
+      if (replaceDone == false) {
+        newInstance = instance;
+      }
+      newInstance = convertInstance(newInstance);
+      push(newInstance);
+      return true;
     }
   }
 
-
   /**
    * Signify that this batch of input to the filter is finished.
-   *
+   * 
    * @return true if there are instances pending output
    * @throws NullPointerException if no input structure has been defined,
    * @throws Exception if there was a problem finishing the batch.
    */
+  @Override
   public boolean batchFinished() throws Exception {
-      if (getInputFormat() == null) {
-	  throw new NullPointerException("No input instance format defined");
-      }
-      
-      boolean conversionDone=false;
-      if(m_replaceMissing!=null) {
-	  if(m_replaceMissing.batchFinished()) {
-	      Instance newInstance, instance;
-	      
-	      while((instance=m_replaceMissing.output())!=null) {
-		  if(!m_OutputFormatDefined)
-		      setOutputFormat();
-		  if(m_ntob!=null) {
-		      m_ntob.input(instance);
-		  }
-		  else {
-		      newInstance = convertInstance(instance);
-		      push(newInstance);
-		  }
-	      }
-
-	      if(m_ntob!=null) {
-		  if(m_ntob.batchFinished()) {
-		      //Instance newInstance, instance;
-		      while((instance=m_ntob.output())!=null) {
-			  if(!m_OutputFormatDefined)
-			      setOutputFormat();
-			  newInstance = convertInstance(instance);
-			  push(newInstance);
-		      }
-		      m_ntob = null;		      
-		  }
-	      }
-	      m_replaceMissing = null;
-	      conversionDone=true;
-	  }
+    if (getInputFormat() == null) {
+      throw new NullPointerException("No input instance format defined");
+    }
+
+    boolean conversionDone = false;
+    if (m_replaceMissing != null) {
+      if (m_replaceMissing.batchFinished()) {
+        Instance newInstance, instance;
+
+        while ((instance = m_replaceMissing.output()) != null) {
+          if (!m_OutputFormatDefined) {
+            setOutputFormat();
+          }
+          if (m_ntob != null) {
+            m_ntob.input(instance);
+          } else {
+            newInstance = convertInstance(instance);
+            push(newInstance);
+          }
+        }
+
+        if (m_ntob != null) {
+          if (m_ntob.batchFinished()) {
+            // Instance newInstance, instance;
+            while ((instance = m_ntob.output()) != null) {
+              if (!m_OutputFormatDefined) {
+                setOutputFormat();
+              }
+              newInstance = convertInstance(instance);
+              push(newInstance);
+            }
+            m_ntob = null;
+          }
+        }
+        m_replaceMissing = null;
+        conversionDone = true;
       }
+    }
 
-      if(conversionDone==false && m_ntob!=null) {
-	  if(m_ntob.batchFinished()) {
-	      Instance newInstance, instance;
-	      while((instance=m_ntob.output())!=null) {
-		  if(!m_OutputFormatDefined)
-		      setOutputFormat();
-		  newInstance = convertInstance(instance);
-		  push(newInstance);
-	      }
-	      m_ntob = null;
-	  }
+    if (conversionDone == false && m_ntob != null) {
+      if (m_ntob.batchFinished()) {
+        Instance newInstance, instance;
+        while ((instance = m_ntob.output()) != null) {
+          if (!m_OutputFormatDefined) {
+            setOutputFormat();
+          }
+          newInstance = convertInstance(instance);
+          push(newInstance);
+        }
+        m_ntob = null;
       }
-      m_OutputFormatDefined=false;
-      return super.batchFinished();
+    }
+    m_OutputFormatDefined = false;
+    return super.batchFinished();
   }
-    
 
-  /** Sets the output format */  
+  /** Sets the output format */
   protected void setOutputFormat() {
-      Instances currentFormat;
-      if(m_ntob!=null) {
-	  currentFormat = m_ntob.getOutputFormat();
-      }
-      else 
-	  currentFormat = getInputFormat();
-      
-      if(m_percent>0)
-	  { m_k = (int) ((getInputFormat().numAttributes()-1)*m_percent); 
-	  // System.out.print("numAtts: "+currentFormat.numAttributes());
-	  // System.out.print("percent: "+m_percent);
-	  // System.out.print("percent*numAtts: "+(currentFormat.numAttributes()*m_percent));
-	  // System.out.println("m_k: "+m_k);
-	  }
-
-      Instances newFormat;
-      int newClassIndex=-1;
-      FastVector attributes = new FastVector();
-      for(int i=0; i<m_k; i++) {
-	  attributes.addElement( new Attribute("K"+(i+1)) );
-      }
-      if(currentFormat.classIndex()!=-1)  {  //if classindex is set
-	  //attributes.removeElementAt(attributes.size()-1);
-	  attributes.addElement(currentFormat.attribute(currentFormat.classIndex()).copy());
-	  newClassIndex = attributes.size()-1;
-      }
+    Instances currentFormat;
+    if (m_ntob != null) {
+      currentFormat = m_ntob.getOutputFormat();
+    } else {
+      currentFormat = getInputFormat();
+    }
+
+    if (m_percent > 0) {
+      m_k = (int) ((getInputFormat().numAttributes() - 1) * m_percent);
+      // System.out.print("numAtts: "+currentFormat.numAttributes());
+      // System.out.print("percent: "+m_percent);
+      // System.out.print("percent*numAtts: "+(currentFormat.numAttributes()*m_percent));
+      // System.out.println("m_k: "+m_k);
+    }
+
+    Instances newFormat;
+    int newClassIndex = -1;
+    FastVector attributes = new FastVector();
+    for (int i = 0; i < m_k; i++) {
+      attributes.addElement(new Attribute("K" + (i + 1)));
+    }
+    if (currentFormat.classIndex() != -1) { // if classindex is set
+      // attributes.removeElementAt(attributes.size()-1);
+      attributes.addElement(currentFormat.attribute(currentFormat.classIndex())
+        .copy());
+      newClassIndex = attributes.size() - 1;
+    }
 
-      newFormat = new Instances(currentFormat.relationName(), attributes, 0);
-      if(newClassIndex!=-1)
-	  newFormat.setClassIndex(newClassIndex);
-      m_OutputFormatDefined=true;
+    newFormat = new Instances(currentFormat.relationName(), attributes, 0);
+    if (newClassIndex != -1) {
+      newFormat.setClassIndex(newClassIndex);
+    }
+    m_OutputFormatDefined = true;
 
-      m_random = new Random();
-      m_random.setSeed(m_rndmSeed);
+    m_random = new Random();
+    m_random.setSeed(m_rndmSeed);
 
-      m_rmatrix = new double[m_k][currentFormat.numAttributes()];
-      if(m_distribution==GAUSSIAN) {
-	  for(int i=0; i<m_rmatrix.length; i++) 
-	      for(int j=0; j<m_rmatrix[i].length; j++) 
-		  m_rmatrix[i][j] = m_random.nextGaussian();
+    m_rmatrix = new double[m_k][currentFormat.numAttributes()];
+    if (m_distribution == GAUSSIAN) {
+      for (int i = 0; i < m_rmatrix.length; i++) {
+        for (int j = 0; j < m_rmatrix[i].length; j++) {
+          m_rmatrix[i][j] = m_random.nextGaussian();
+        }
       }
-      else {
-	  boolean useDstrWithZero = (m_distribution==SPARSE1);
-	  for(int i=0; i<m_rmatrix.length; i++) 
-	      for(int j=0; j<m_rmatrix[i].length; j++) 
-		  m_rmatrix[i][j] = rndmNum(useDstrWithZero);
+    } else {
+      boolean useDstrWithZero = (m_distribution == SPARSE1);
+      for (int i = 0; i < m_rmatrix.length; i++) {
+        for (int j = 0; j < m_rmatrix[i].length; j++) {
+          m_rmatrix[i][j] = rndmNum(useDstrWithZero);
+        }
       }
+    }
 
-      setOutputFormat(newFormat);
+    setOutputFormat(newFormat);
   }
 
   /**
    * converts a single instance to the required format
-   *
-   * @param currentInstance     the instance to convert
-   * @return                    the converted instance
+   * 
+   * @param currentInstance the instance to convert
+   * @return the converted instance
    */
   protected Instance convertInstance(Instance currentInstance) {
 
-      Instance newInstance;
-      double vals[] = new double[getOutputFormat().numAttributes()];
-      int classIndex = (m_ntob==null) ? getInputFormat().classIndex():m_ntob.getOutputFormat().classIndex();
+    Instance newInstance;
+    double vals[] = new double[getOutputFormat().numAttributes()];
+    int classIndex =
+      (m_ntob == null) ? getInputFormat().classIndex() : m_ntob
+        .getOutputFormat().classIndex();
 
-      for(int i = 0; i < m_k; i++) {
-        vals[i] = computeRandomProjection(i,classIndex,currentInstance);
-      }
-      if (classIndex != -1) {
-        vals[m_k] = currentInstance.value(classIndex);
-      }
+    for (int i = 0; i < m_k; i++) {
+      vals[i] = computeRandomProjection(i, classIndex, currentInstance);
+    }
+    if (classIndex != -1) {
+      vals[m_k] = currentInstance.value(classIndex);
+    }
 
-      newInstance = new Instance(currentInstance.weight(), vals);
-      newInstance.setDataset(getOutputFormat());
+    newInstance = new Instance(currentInstance.weight(), vals);
+    newInstance.setDataset(getOutputFormat());
 
-      return newInstance;
+    return newInstance;
   }
 
-
   /**
    * computes one random projection for a given instance (skip missing values)
-   *
-   * @param rpIndex     offset the new random projection attribute
-   * @param classIndex  classIndex of the input instance
-   * @param instance    the instance to convert
-   * @return    the random sum
+   * 
+   * @param rpIndex offset the new random projection attribute
+   * @param classIndex classIndex of the input instance
+   * @param instance the instance to convert
+   * @return the random sum
    */
 
-  protected double computeRandomProjection(int rpIndex, int classIndex, Instance instance) {
+  protected double computeRandomProjection(int rpIndex, int classIndex,
+    Instance instance) {
 
     double sum = 0.0;
-    for(int i = 0; i < instance.numValues(); i++) {
+    for (int i = 0; i < instance.numValues(); i++) {
       int index = instance.index(i);
       if (index != classIndex) {
         double value = instance.valueSparse(i);
@@ -843,64 +891,67 @@ public class RandomProjection
     return sum;
   }
 
-  private static final int weights[] = {1, 1, 4};
-  private static final int vals[] = {-1, 1, 0};
-  private static final int weights2[] = {1, 1};
-  private static final int vals2[] = {-1, 1};
+  private static final int weights[] = { 1, 1, 4 };
+  private static final int vals[] = { -1, 1, 0 };
+  private static final int weights2[] = { 1, 1 };
+  private static final int vals2[] = { -1, 1 };
   private static final double sqrt3 = Math.sqrt(3);
 
   /**
    * returns a double x such that <br/>
-   *      x = sqrt(3) * { -1 with prob. 1/6, 0 with prob. 2/3, 1 with prob. 1/6 }
-   *      
+   * x = sqrt(3) * { -1 with prob. 1/6, 0 with prob. 2/3, 1 with prob. 1/6 }
+   * 
    * @param useDstrWithZero
    * @return the generated number
    */
   protected double rndmNum(boolean useDstrWithZero) {
-      if(useDstrWithZero)
-	  return sqrt3 * vals[weightedDistribution(weights)];
-      else
-	  return vals2[weightedDistribution(weights2)];
+    if (useDstrWithZero) {
+      return sqrt3 * vals[weightedDistribution(weights)];
+    } else {
+      return vals2[weightedDistribution(weights2)];
+    }
   }
 
-  /** 
+  /**
    * Calculates a weighted distribution
    * 
    * @param weights the weights to use
    * @return
    */
-  protected int weightedDistribution(int [] weights) {
-      int sum=0; 
-      
-      for(int i=0; i<weights.length; i++) 
-	  sum += weights[i];
-      
-      int val = (int)Math.floor(m_random.nextDouble()*sum);
-      
-      for(int i=0; i<weights.length; i++) {
-	  val -= weights[i];
-	  if(val<0)
-	      return i;
+  protected int weightedDistribution(int[] weights) {
+    int sum = 0;
+
+    for (int weight : weights) {
+      sum += weight;
+    }
+
+    int val = (int) Math.floor(m_random.nextDouble() * sum);
+
+    for (int i = 0; i < weights.length; i++) {
+      val -= weights[i];
+      if (val < 0) {
+        return i;
       }
-      return -1;
-  }  
-  
+    }
+    return -1;
+  }
+
   /**
    * Returns the revision string.
    * 
-   * @return		the revision
+   * @return the revision
    */
+  @Override
   public String getRevision() {
-    return RevisionUtils.extract("$Revision: 10029 $");
+    return RevisionUtils.extract("$Revision: 10832 $");
   }
 
   /**
    * Main method for testing this class.
-   *
-   * @param argv should contain arguments to the filter: 
-   * use -h for help
+   * 
+   * @param argv should contain arguments to the filter: use -h for help
    */
-  public static void main(String [] argv) {
+  public static void main(String[] argv) {
     runFilter(new RandomProjection(), argv);
   }
 }
diff --git a/src/main/java/weka/gui/GenericObjectEditor.java b/src/main/java/weka/gui/GenericObjectEditor.java
index 6dbfdc5..4a6dc81 100644
--- a/src/main/java/weka/gui/GenericObjectEditor.java
+++ b/src/main/java/weka/gui/GenericObjectEditor.java
@@ -108,7 +108,7 @@ import weka.gui.CheckBoxList.CheckBoxListModel;
  * @author Xin Xu (xx5 at cs.waikato.ac.nz)
  * @author Richard Kirkby (rkirkby at cs.waikato.ac.nz)
  * @author FracPete (fracpete at waikato dot ac dot nz)
- * @version $Revision: 10570 $
+ * @version $Revision: 11356 $
  */
 public class GenericObjectEditor implements PropertyEditor, CustomPanelSupplier {
 
@@ -353,23 +353,17 @@ public class GenericObjectEditor implements PropertyEditor, CustomPanelSupplier
         if (m_Capabilities != null) {
           if (m_Capabilities.supportsMaybe(m_CapabilitiesFilter)
             && !m_Capabilities.supports(m_CapabilitiesFilter)) {
-            result = Messages.getInstance().getString(
-              "GenericObjectEditor_GOETreeNode_ToString_Result_Text_First")
+            result = "<html><font color=\"" 
               + MAYBE_SUPPORT
-              + Messages.getInstance().getString(
-                "GenericObjectEditor_GOETreeNode_ToString_Result_Text_Second")
+	      + "\">"
               + result
-              + Messages.getInstance().getString(
-                "GenericObjectEditor_GOETreeNode_ToString_Result_Text_Third");
+		+ "</font><html>";
           } else if (!m_Capabilities.supports(m_CapabilitiesFilter)) {
-            result = Messages.getInstance().getString(
-              "GenericObjectEditor_GOETreeNode_ToString_Result_Text_Fourth")
+            result = "<html><font color=\"" 
               + NO_SUPPORT
-              + Messages.getInstance().getString(
-                "GenericObjectEditor_GOETreeNode_ToString_Result_Text_Fifth")
+              + "\">"
               + result
-              + Messages.getInstance().getString(
-                "GenericObjectEditor_GOETreeNode_ToString_Result_Text_Sixth");
+              + "</font><html>";
           }
         }
       }
diff --git a/src/main/java/weka/gui/arffviewer/messages/messages_ar.properties b/src/main/java/weka/gui/arffviewer/messages/messages_ar.properties
new file mode 100644
index 0000000..f1f1e95
--- /dev/null
+++ b/src/main/java/weka/gui/arffviewer/messages/messages_ar.properties
@@ -0,0 +1,106 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+ArffPanel_SetValues_Title_Text_First=\u0627\u0633\u062A\u0628\u062F\u0627\u0644 \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u0645\u0641\u0642\u0648\u062F\u0629 ...
+ArffTableModel_GetColumnName_Result_Date_Text=<BR> <font size"-2"> \u0627\u0644\u062A\u0627\u0631\u064A\u062E </ FONT>
+ArffViewerMainPanel_CreatePanel_ViewValues_JMenuItem_Text=\u0627\u0644\u0642\u064A\u0645 ...
+ArffPanel_Undo_JMenuItem_Text=\u062A\u0631\u0627\u062C\u0639
+ArffViewerMainPanel_CreatePanel_View_JMenu_Text=\u0639\u0631\u0636
+ArffPanel_SetAllValuesTo_JMenuItem_Text=\u062A\u0639\u064A\u064A\u0646 \u0643\u0627\u0641\u0629 \u0627\u0644\u0642\u064A\u0645 \u0625\u0644\u0649 ...
+ArffPanel_OptimalColWidths_JMenuItem_Text=\u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0623\u0645\u062B\u0644 ( \u062C\u0645\u064A\u0639 )
+ArffViewerMainPanel_GetFrameTitle_Text=- 
+ArffViewerMainPanel_ShowProperties_Filename_Text=\u0627\u0633\u0645 \u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+ArffPanel_DeleteAttribute_ComponentHelperShowMessageBox_Text_Third='?
+ArffPanel_DeleteAttribute_ComponentHelperShowMessageBox_Text_Second=\u0647\u0644 \u062D\u0642\u0627 \u062A\u0631\u064A\u062F \u062D\u0630\u0641 \u0627\u0644\u0633\u0645\u0629 '
+ArffPanel_Search_JMenuItem_Text=\u0628\u062D\u062B ...
+ArffViewerMainPanel_CreatePanel_Copy_JMenuItem_Text=\u0646\u0633\u062E
+ArffTableModel_GetColumnName_Result_Relational_Text=<BR> <font size"-2"> \u0627\u0644\u0639\u0644\u0627\u0642\u0627\u062A </ FONT>
+ArffViewerMainPanel_CreatePanel_CloseAll_JMenuItem_Text=\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062C\u0645\u064A\u0639
+ArffPanel_Search_ComponentHelperShowInputBox_Text_First=\u0628\u062D\u062B ...
+ArffTableModel_GetColumnName_Result_Default_Text=<br><font size\="-2">???</font>
+ArffPanel_CalcMean_Text_Third='\:\n\t
+ArffViewerMainPanel_CreatePanel_RenameAttribute_JMenuItem_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0633\u0645\u0629
+ArffViewerMainPanel_CreatePanel_DeleteInstance_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u062D\u0627\u0644\u0629
+ArffTable_GetPlainColumnName_Result_Text=\u0644\u0627.
+ArffTableModel_LoadFile_ComponentHelperShowMessageBox_Text=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 ...
+ArffViewerMainPanel_CreatePanel_Save_JMenuItem_Text=\u062D\u0641\u0638
+ArffPanel_TableHeader_ToolTipText_Text=<html><b>\u0627\u0644\u062A\u0631\u062A\u064A\u0628\:</b>\u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0633\u0631\= \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0633\u0631  \u062A\u0635\u0627\u0639\u062F\u064A / Shift +   \= \u062A\u0646\u0627\u0632\u0644\u064A<br><b>\u0627\u0644\u0642\u0627 [...]
+ArffPanel_DeleteAttribute_ComponentHelperShowMessageBox_Text_First=\u062A\u0623\u0643\u064A\u062F ...
+ArffViewerMainPanel_CreatePanel_ViewAttributes_JMenuItem_Text=\u0633\u0645\u0627\u062A ...
+ArffPanel_Copy_JMenuItem_Text=\u0646\u0633\u062E
+ArffPanel_DeleteAttributes_JMenuItem_Text=\u062D\u0630\u0641 \u0633\u0645\u0627\u062A ...
+ArffPanel_ToolTipText_Text=\u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 (or left+alt) \u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u064A\u0627\u0642
+ArffPanel_DeleteAllSelectedInstances_JMenuItem_Text=\u062D\u0630\u0641 \u062C\u0645\u064A\u0639 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629
+ArffViewerMainPanel_ShowProperties_ClassLabels_Text=\u0639\u062F\u062F \u062A\u0633\u0645\u064A\u0627\u062A \u0627\u0644\u0641\u0626\u0627\u062A\:
+ArffPanel_CalcMean_Text_First=\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0645\u0629 ...
+ArffPanel_Search_ComponentHelperShowInputBox_Text_Second=\u0623\u062F\u062E\u0644 \u0627\u0644\u0643\u0644\u0645\u0629 \u0644\u0644\u0628\u062D\u062B \u0639\u0646\u0647\u0627
+ArffPanel_ClearSearch_JMenuItem_Text=\u0645\u0633\u062D \u0627\u0644\u0628\u062D\u062B 
+ArffTableModel_GetColumnName_Result_Text_Second=<html><center>
+ArffViewerMainPanel_CreatePanel_DeleteAttributes_JMenuItem_Text=\u062D\u0630\u0641 \u0633\u0645\u0627\u062A
+ArffTable_RelationalCellEditor_RelationalCellEditor_ViewerDialog_Text=\u0645\u0645\u062B\u0644 \u0639\u0644\u0627\u0642\u0627\u062A \u0627\u0644\u0633\u0645\u0627\u062A - 
+ArffPanel_CreateName_Text=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ArffViewerMainPanel_CreatePanel_FileOpen_JMenuItem_Text=\u0641\u062A\u062D...    
+ArffTable_RelationalCellEditor_RelationalCellEditor_JButton_Text=...
+ArffTable_GetStringSelection_ComponentHelperShowMessageBox_Text_First=\u0627\u0644\u0633\u0624\u0627\u0644 ...
+ArffPanel_DeleteAttributes_ComponentHelperShowMessageBox_Text_Third=\u0627\u0644\u0633\u0645\u0627\u062A\u061F
+ArffViewerMainPanel_CreatePanel_File_JMenu_Text=\u0645\u0644\u0641
+ArffPanel_RenameAttribute_ComponentHelperShowInputBox_Text_First=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0633\u0645\u0629 ...
+ArffPanel_SetMissingValues_JMenuItem_Text=\u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u0645\u0641\u0642\u0648\u062F\u0629 \u0625\u0644\u0649 ...
+ArffTableModel_GetColumnName_Result_Text_Third=<B>
+ArffPanel_SortInstances_JMenuItem_Text=\u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A  (\u062A\u0635\u0627\u0639\u062F\u064A)
+ArffViewerMainPanel_SaveFileAs_Text=\u0644\u0627 \u0634\u064A\u0621 \u0634\u064A\u0621 \u0645\u062E\u062A\u0627\u0631 \!
+ArffViewerMainPanel_SaveChanges_ComponentHelperShowMessageBox_Text_Fourth=\u0627\u0644\u0645\u0644\u0641 \u063A\u064A\u0631 \u0645\u062D\u0641\u0648\u0638- \u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0641\u0638\u0647 \u061F
+ArffViewerMainPanel_SaveChanges_ComponentHelperShowMessageBox_Text_Third=\u062A\u0645 \u0627\u0644\u062A\u063A\u064A\u064A\u0631
+ArffTableModel_GetColumnName_Result_Nominal_Text=<BR> <font size"-2"> \u0627\u0644\u0627\u0633\u0645\u064A\u0629 </ FONT>
+ArffViewerMainPanel_CreatePanel_Search_JMenuItem_Text=\u0628\u062D\u062B ...
+ArffViewerMainPanel_ShowProperties_ClassAttribute_Text=\u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629\:   
+ArffTableCellRenderer_GetTableCellRendererComponent_SetToolTipText_Text=\u0645\u0641\u0642\u0648\u062F
+ArffViewerMainPanel_CreatePanel_ViewOptimalColWidths_JMenuItem_Text=\u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0623\u0645\u062B\u0644 ( \u062C\u0645\u064A\u0639 )
+ArffPanel_SetValues_Title_Text_Second=\u062A\u0639\u064A\u064A\u0646 \u0643\u0627\u0641\u0629 \u0627\u0644\u0642\u064A\u0645 ...
+ArffViewerMainPanel_CreatePanel_Properties_JMenuItem_Text=\u062E\u0635\u0627\u0626\u0635
+ArffPanel_ReplaceValues_JMenuItem_Text=\u0627\u0633\u062A\u0628\u062F\u0627\u0644 \u0627\u0644\u0642\u064A\u0645 \u0645\u0639 ...
+ArffViewerMainPanel_ShowProperties_Instances_Text=\u0639\u062F\u062F \u0627\u0644\u062D\u0627\u0644\u0627\u062A\:
+ArffPanel_DeleteAttributes_ComponentHelperShowMessageBox_Text_First=\u062A\u0623\u0643\u064A\u062F ...
+ArffTable_GetStringSelection_ComponentHelperShowMessageBox_Text_Second=\u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0642\u0627 \u0646\u0633\u062E \u0627\u0644\u062C\u062F\u0648\u0644 \u0628\u0623\u0643\u0645\u0644\u0647 \u061F
+ArffViewerMainPanel_CreatePanel_SaveAs_JMenuItem_Text=\u062D\u0641\u0638 \u0643 ...
+ArffPanel_DeleteAttribute_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0633\u0645\u0629
+ArffTableModel_GetColumnName_Result_Text_First=<html><center>\u0644\u0627.<br><font size\="-2"> </font></center></html>
+ArffViewer_WindowClosing_ComponentHelperShowMessageBox_Text_First=\u0625\u0646\u0647\u0627\u0621 - 
+ArffViewerMainPanel_SaveChanges_ComponentHelperShowMessageBox_Text_First=\u062A\u0645 \u0627\u0644\u062A\u063A\u064A\u064A\u0631
+ArffPanel_DeleteAttributes_ComponentHelperShowMessageBox_Text_Second=\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u0627\u0644\u062D\u0630\u0641\u061F
+ArffPanel_SetValues_Message_Text_Third=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0642\u062F\u064A\u0645\u0629
+ArffTableModel_GetColumnName_Result_Text_Forth=</b>
+ArffViewerMainPanel_CreatePanel_ClearSearch_JMenuItem_Text=\u0645\u0633\u062D \u0627\u0644\u0628\u062D\u062B 
+ArffViewerMainPanel_CreatePanel_SortDataAscending_JMenuItem_Text=\u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A  (\u062A\u0635\u0627\u0639\u062F\u064A)
+ArffViewerMainPanel_ShowProperties_Attributes_Text=\u0639\u062F\u062F \u0627\u0644\u0633\u0645\u0627\u062A\:
+ArffTableModel_GetColumnName_Result_String_Text=<BR> <font size"-2"> \u0633\u0644\u0633\u0644\u0629 </ FONT>
+ArffPanel_GetMean_JMenuItem_Text=\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u062A\u0648\u0633\u0637 ...
+ArffViewer_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+ArffViewer_Main_Error_DisplayedMessage_Text=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+ArffPanel_AttributeAsClass_JMenuItem_Text=\u0627\u0644\u0633\u0645\u0629 \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u0646 \u0627\u0644\u0641\u0626\u0629
+ArffPanel_RenameAttribute_ComponentHelperShowInputBox_Text_Second=\u0623\u062F\u062E\u0644 \u0627\u0633\u0645 \u0633\u0645\u0629 \u062C\u062F\u064A\u062F\u0629
+ArffPanel_SetValues_Message_Text_First=\u0642\u064A\u0645\u0629 \u062C\u062F\u064A\u062F\u0629 \u0644\u0644\u0642\u064A\u0645 \u0627\u0644\u0645\u0641\u0642\u0648\u062F\u0629
+ArffPanel_TabInstanses_Text=\u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ArffTableModel_GetColumnName_Result_Text_End=</center></html>
+ArffViewer_Main_Error_Restarting_Text=\n \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644 ...
+ArffPanel_OptimalColWidth_JMenuItem_Text=\u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0623\u0645\u062B\u0644 ( \u0627\u0644\u062D\u0627\u0644\u064A )
+ArffViewerMainPanel_CreatePanel_Close_JMenuItem_Text=\u0625\u063A\u0644\u0627\u0642
+ArffViewerMainPanel_CreatePanel_AttributeAsClass_JMenuItem_Text=\u0627\u0644\u0633\u0645\u0629 \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u0646 \u0627\u0644\u0641\u0626\u0629
+ArffPanel_DeleteSelectedInstance_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0645\u062D\u062F\u062F
+ArffPanel_SetValues_Message_Text_Second=\u0642\u064A\u0645\u0629 \u062C\u062F\u064A\u062F\u0629 \u0644\u062C\u0645\u064A\u0639 \u0627\u0644\u0642\u064A\u0645
+ArffPanel_RenameAttribute_JMenuItem_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0633\u0645\u0629 ...
+ArffTableModel_SetValueAt_Default_Error_Text_Front=\u0646\u0648\u0639 \u0633\u0645\u0629 \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645\:
+ArffViewer_WindowClosing_ComponentHelperShowMessageBox_Text_Second=\u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0642\u0627 \u0627\u0644\u0625\u0646\u0647\u0627\u0621
+ArffPanel_SetValues_Title_Text_Third=\u0627\u0633\u062A\u0628\u062F\u0627\u0644 \u0627\u0644\u0642\u064A\u0645 ...
+ArffViewer_ArffViewer_Text=ARFF-\u0639\u0627\u0631\u0636
+ArffPanel_CalcMean_Text_Second=\u0645\u062A\u0648\u0633\u0637  \u0627\u0644\u0635\u0641\u0629 '
+ArffViewerMainPanel_CreatePanel_Edit_JMenuItem_Text=\u062A\u0639\u062F\u064A\u0644
+ArffViewerMainPanel_SaveChanges_ComponentHelperShowMessageBox_Text_Second=\u0627\u0644\u0645\u0644\u0641 \u063A\u064A\u0631 \u0645\u062D\u0641\u0648\u0638- \u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0641\u0638\u0647 \u061F
+ArffPanel_SetValues_ComponentHelperShowInputBox_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629
+ArffViewerMainPanel_CreatePanel_Undo_JMenuItem_Text=\u062A\u0631\u0627\u062C\u0639
+ArffViewerMainPanel_CreatePanel_DeleteAttribute_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0633\u0645\u0629
+ArffViewerMainPanel_CreatePanel_DeleteInstances_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ArffViewerMainPanel_CreatePanel_Exit_JMenuItem_Text=\u062E\u0631\u0648\u062C
+ArffPanel_CreateTitle_Title_Text=\u0644\u0627 \u0634\u064A\u0621 \u060C
+ArffViewerMainPanel_Title_Text=ARFF-\u0639\u0627\u0631\u0636
+ArffTableModel_GetColumnName_Result_Numeric_Text=<BR> <font size"-2"> \u0627\u0644\u0631\u0642\u0645\u064A\u0629 </ FONT>
+ArffTableModel_SetValueAt_Default_Error_Text_End=\!
diff --git a/src/main/java/weka/gui/beans/Classifier.java b/src/main/java/weka/gui/beans/Classifier.java
index 95b7ccb..d3ff453 100644
--- a/src/main/java/weka/gui/beans/Classifier.java
+++ b/src/main/java/weka/gui/beans/Classifier.java
@@ -60,7 +60,7 @@ import weka.gui.Logger;
  * Bean that wraps around weka.classifiers
  * 
  * @author <a href="mailto:mhall at cs.waikato.ac.nz">Mark Hall</a>
- * @version $Revision: 9294 $
+ * @version $Revision: 10819 $
  * @since 1.0
  * @see JPanel
  * @see BeanCommon
@@ -72,20 +72,18 @@ import weka.gui.Logger;
  * @see TestSetListener
  */
 public class Classifier extends JPanel implements BeanCommon, Visible,
-    WekaWrapper, EventConstraints, Serializable, UserRequestAcceptor,
-    TrainingSetListener, TestSetListener, InstanceListener {
+  WekaWrapper, EventConstraints, Serializable, UserRequestAcceptor,
+  TrainingSetListener, TestSetListener, InstanceListener {
 
   /** for serialization */
   private static final long serialVersionUID = 659603893917736008L;
 
   protected BeanVisual m_visual = new BeanVisual("Classifier",
-      BeanVisual.ICON_PATH + "DefaultClassifier.gif", BeanVisual.ICON_PATH
-          + "DefaultClassifier_animated.gif");
+    BeanVisual.ICON_PATH + "DefaultClassifier.gif", BeanVisual.ICON_PATH
+      + "DefaultClassifier_animated.gif");
 
   private static int IDLE = 0;
   private static int BUILDING_MODEL = 1;
-  private static int CLASSIFYING = 2;
-
   private int m_state = IDLE;
 
   // private Thread m_buildThread = null;
@@ -126,13 +124,12 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * be asked to predict in the future.
    */
   private Instances m_trainingSet;
-  private transient Instances m_testingSet;
   private weka.classifiers.Classifier m_Classifier = new ZeroR();
   /** Template used for creating copies when building in parallel */
   private weka.classifiers.Classifier m_ClassifierTemplate = m_Classifier;
 
-  private final IncrementalClassifierEvent m_ie = new IncrementalClassifierEvent(
-      this);
+  private final IncrementalClassifierEvent m_ie =
+    new IncrementalClassifierEvent(this);
 
   /** the extension for serialized models (binary Java serialization) */
   public final static String FILE_EXTENSION = "model";
@@ -140,27 +137,27 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   private transient JFileChooser m_fileChooser = null;
 
   protected FileFilter m_binaryFilter = new ExtensionFileFilter("."
-      + FILE_EXTENSION, Messages.getInstance().getString(
-      "Classifier_BinaryFilter_ExtensionFileFilter_Text_First")
-      + FILE_EXTENSION
-      + Messages.getInstance().getString(
-          "Classifier_BinaryFilter_ExtensionFileFilter_Text_Second"));
+    + FILE_EXTENSION, Messages.getInstance().getString(
+    "Classifier_BinaryFilter_ExtensionFileFilter_Text_First")
+    + FILE_EXTENSION
+    + Messages.getInstance().getString(
+      "Classifier_BinaryFilter_ExtensionFileFilter_Text_Second"));
 
   protected FileFilter m_KOMLFilter = new ExtensionFileFilter(
-      KOML.FILE_EXTENSION + FILE_EXTENSION, Messages.getInstance().getString(
-          "Classifier_KOMLFilter_ExtensionFileFilter_Text_First")
-          + KOML.FILE_EXTENSION
-          + FILE_EXTENSION
-          + Messages.getInstance().getString(
-              "Classifier_KOMLFilter_ExtensionFileFilter_Text_Second"));
+    KOML.FILE_EXTENSION + FILE_EXTENSION, Messages.getInstance().getString(
+      "Classifier_KOMLFilter_ExtensionFileFilter_Text_First")
+      + KOML.FILE_EXTENSION
+      + FILE_EXTENSION
+      + Messages.getInstance().getString(
+        "Classifier_KOMLFilter_ExtensionFileFilter_Text_Second"));
 
   protected FileFilter m_XStreamFilter = new ExtensionFileFilter(
-      XStream.FILE_EXTENSION + FILE_EXTENSION, Messages.getInstance()
-          .getString("Classifier_XStreamFilter_ExtensionFileFilter_Text_First")
-          + XStream.FILE_EXTENSION
-          + FILE_EXTENSION
-          + Messages.getInstance().getString(
-              "Classifier_XStreamFilter_ExtensionFileFilter_Text_Second"));
+    XStream.FILE_EXTENSION + FILE_EXTENSION, Messages.getInstance().getString(
+      "Classifier_XStreamFilter_ExtensionFileFilter_Text_First")
+      + XStream.FILE_EXTENSION
+      + FILE_EXTENSION
+      + Messages.getInstance().getString(
+        "Classifier_XStreamFilter_ExtensionFileFilter_Text_Second"));
 
   /**
    * If the classifier is an incremental classifier, should we update it (ie
@@ -241,8 +238,9 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       m_executorPool.shutdownNow();
     }
 
-    m_executorPool = new ThreadPoolExecutor(m_executionSlots, m_executionSlots,
-        120, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+    m_executorPool =
+      new ThreadPoolExecutor(m_executionSlots, m_executionSlots, 120,
+        TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
   }
 
   /**
@@ -250,6 +248,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param name the name to use
    */
+  @Override
   public void setCustomName(String name) {
     m_visual.setText(name);
   }
@@ -259,13 +258,15 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @return the custom name (or the default name)
    */
+  @Override
   public String getCustomName() {
     return m_visual.getText();
   }
 
   protected void setupFileChooser() {
     if (m_fileChooser == null) {
-      m_fileChooser = new JFileChooser(new File(System.getProperty("user.dir")));
+      m_fileChooser =
+        new JFileChooser(new File(System.getProperty("user.dir")));
     }
 
     m_fileChooser.addChoosableFileFilter(m_binaryFilter);
@@ -304,7 +305,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   public void setClassifierTemplate(weka.classifiers.Classifier c) {
     boolean loadImages = true;
     if (c.getClass().getName()
-        .compareTo(m_ClassifierTemplate.getClass().getName()) == 0) {
+      .compareTo(m_ClassifierTemplate.getClass().getName()) == 0) {
       loadImages = false;
     } else {
       // classifier has changed so any batch training status is now
@@ -313,27 +314,28 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
     }
     m_ClassifierTemplate = c;
     String classifierName = c.getClass().toString();
-    classifierName = classifierName.substring(
-        classifierName.lastIndexOf('.') + 1, classifierName.length());
+    classifierName =
+      classifierName.substring(classifierName.lastIndexOf('.') + 1,
+        classifierName.length());
     if (loadImages) {
       if (!m_visual.loadIcons(BeanVisual.ICON_PATH + classifierName + ".gif",
-          BeanVisual.ICON_PATH + classifierName + "_animated.gif")) {
+        BeanVisual.ICON_PATH + classifierName + "_animated.gif")) {
         useDefaultVisual();
       }
       m_visual.setText(classifierName);
     }
 
     if (!(m_ClassifierTemplate instanceof weka.classifiers.UpdateableClassifier)
-        && (m_listenees.containsKey("instance"))) {
+      && (m_listenees.containsKey("instance"))) {
       if (m_log != null) {
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_SetClassifierTemplate_LogMessage_Text_First")
-            + statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_SetClassifierTemplate_LogMessage_Text_Second")
-            + getCustomName()
-            + Messages.getInstance().getString(
-                "Classifier_SetClassifierTemplate_LogMessage_Text_Third"));
+          "Classifier_SetClassifierTemplate_LogMessage_Text_First")
+          + statusMessagePrefix()
+          + Messages.getInstance().getString(
+            "Classifier_SetClassifierTemplate_LogMessage_Text_Second")
+          + getCustomName()
+          + Messages.getInstance().getString(
+            "Classifier_SetClassifierTemplate_LogMessage_Text_Third"));
       }
     }
     // get global info
@@ -350,19 +352,19 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   }
 
   private void setTrainedClassifier(weka.classifiers.Classifier tc)
-      throws Exception {
+    throws Exception {
 
     // set the template
     weka.classifiers.Classifier newTemplate = null;
 
     String[] options = tc.getOptions();
-    newTemplate = weka.classifiers.Classifier.forName(tc.getClass().getName(),
-        options);
+    newTemplate =
+      weka.classifiers.Classifier.forName(tc.getClass().getName(), options);
 
     if (!newTemplate.getClass().equals(m_ClassifierTemplate.getClass())) {
       throw new Exception("Classifier model " + tc.getClass().getName()
-          + " is not the same type " + "of classifier as this one ("
-          + m_ClassifierTemplate.getClass().getName() + ")");
+        + " is not the same type " + "of classifier as this one ("
+        + m_ClassifierTemplate.getClass().getName() + ")");
     }
     setClassifierTemplate(newTemplate);
 
@@ -396,7 +398,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       return false;
     }
     if (m_listenees.containsKey("trainingSet")
-        || m_listenees.containsKey("testSet")) {
+      || m_listenees.containsKey("testSet")) {
       return true;
     }
     return false;
@@ -417,15 +419,13 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param algorithm an <code>Object</code> value
    * @exception IllegalArgumentException if an error occurs
    */
+  @Override
   public void setWrappedAlgorithm(Object algorithm) {
 
     if (!(algorithm instanceof weka.classifiers.Classifier)) {
-      throw new IllegalArgumentException(
-          algorithm.getClass()
-              + Messages
-                  .getInstance()
-                  .getString(
-                      "Classifier_SetWrappedAlgorithm_IllegalArgumentException_Text_First"));
+      throw new IllegalArgumentException(algorithm.getClass()
+        + Messages.getInstance().getString(
+          "Classifier_SetWrappedAlgorithm_IllegalArgumentException_Text_First"));
     }
     setClassifierTemplate((weka.classifiers.Classifier) algorithm);
   }
@@ -435,6 +435,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @return an <code>Object</code> value
    */
+  @Override
   public Object getWrappedAlgorithm() {
     return getClassifierTemplate();
   }
@@ -464,6 +465,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param e an <code>InstanceEvent</code> value
    */
+  @Override
   public void acceptInstance(InstanceEvent e) {
     m_incrementalEvent = e;
     handleIncrementalEvent();
@@ -474,19 +476,20 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    */
   private void handleIncrementalEvent() {
     if (m_executorPool != null
-        && (m_executorPool.getQueue().size() > 0 || m_executorPool
-            .getActiveCount() > 0)) {
+      && (m_executorPool.getQueue().size() > 0 || m_executorPool
+        .getActiveCount() > 0)) {
 
-      String messg = Messages.getInstance().getString(
+      String messg =
+        Messages.getInstance().getString(
           "Classifier_HandleIncrementalEvent_Messg_Text_First")
           + statusMessagePrefix()
           + Messages.getInstance().getString(
-              "Classifier_HandleIncrementalEvent_Messg_Text_Second");
+            "Classifier_HandleIncrementalEvent_Messg_Text_Second");
       if (m_log != null) {
         m_log.logMessage(messg);
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_HandleIncrementalEvent_StatusMessage_Text_First"));
+          + Messages.getInstance().getString(
+            "Classifier_HandleIncrementalEvent_StatusMessage_Text_First"));
       } else {
         System.err.println(messg);
       }
@@ -504,24 +507,25 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // default to the last column if no class is set
       if (dataset.classIndex() < 0) {
         stop();
-        String errorMessage = statusMessagePrefix()
+        String errorMessage =
+          statusMessagePrefix()
             + Messages.getInstance().getString(
-                "Classifier_HandleIncrementalEvent_ErrorMessage_Text_First");
+              "Classifier_HandleIncrementalEvent_ErrorMessage_Text_First");
         if (m_log != null) {
           m_log.statusMessage(errorMessage);
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_HandleIncrementalEvent_LogMessage_Text_First")
-              + getCustomName()
-              + Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_LogMessage_Text_Second")
-              + errorMessage);
+            "Classifier_HandleIncrementalEvent_LogMessage_Text_First")
+            + getCustomName()
+            + Messages.getInstance().getString(
+              "Classifier_HandleIncrementalEvent_LogMessage_Text_Second")
+            + errorMessage);
         } else {
           System.err.println(Messages.getInstance().getString(
-              "Classifier_HandleIncrementalEvent_Error_Text_First")
-              + getCustomName()
-              + Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_Error_Text_Second")
-              + errorMessage);
+            "Classifier_HandleIncrementalEvent_Error_Text_First")
+            + getCustomName()
+            + Messages.getInstance().getString(
+              "Classifier_HandleIncrementalEvent_Error_Text_Second")
+            + errorMessage);
         }
         return;
 
@@ -536,27 +540,29 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           if (!(m_ClassifierTemplate instanceof weka.classifiers.UpdateableClassifier)) {
             stop(); // stop all processing
             if (m_log != null) {
-              String msg = (m_trainingSet == null) ? statusMessagePrefix()
+              String msg =
+                (m_trainingSet == null) ? statusMessagePrefix()
                   + Messages.getInstance().getString(
-                      "Classifier_HandleIncrementalEvent_Msg_Text_First")
+                    "Classifier_HandleIncrementalEvent_Msg_Text_First")
                   : statusMessagePrefix()
-                      + Messages.getInstance().getString(
-                          "Classifier_HandleIncrementalEvent_Msg_Text_Second");
+                    + Messages.getInstance().getString(
+                      "Classifier_HandleIncrementalEvent_Msg_Text_Second");
               m_log.logMessage(Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_LogMessage_Text_Third")
-                  + msg);
+                "Classifier_HandleIncrementalEvent_LogMessage_Text_Third")
+                + msg);
               m_log.statusMessage(msg);
             }
             return;
           }
           if (m_trainingSet != null && (!dataset.equalHeaders(m_trainingSet))) {
             if (m_log != null) {
-              String msg = statusMessagePrefix()
+              String msg =
+                statusMessagePrefix()
                   + Messages.getInstance().getString(
-                      "Classifier_HandleIncrementalEvent_Msg_Text_Third");
+                    "Classifier_HandleIncrementalEvent_Msg_Text_Third");
               m_log.logMessage(Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_LogMessage_Text_Fourth")
-                  + msg);
+                "Classifier_HandleIncrementalEvent_LogMessage_Text_Fourth")
+                + msg);
               m_log.statusMessage(msg);
             }
             m_trainingSet = null;
@@ -564,26 +570,23 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           if (m_trainingSet == null) {
             // initialize the classifier if it hasn't been trained yet
             m_trainingSet = new Instances(dataset, 0);
-            m_Classifier = weka.classifiers.Classifier
-                .makeCopy(m_ClassifierTemplate);
+            m_Classifier =
+              weka.classifiers.Classifier.makeCopy(m_ClassifierTemplate);
             m_Classifier.buildClassifier(m_trainingSet);
           }
         }
       } catch (Exception ex) {
         stop();
         if (m_log != null) {
-          m_log
-              .statusMessage(statusMessagePrefix()
-                  + Messages
-                      .getInstance()
-                      .getString(
-                          "Classifier_HandleIncrementalEvent_StatusMessage_Text_Second"));
+          m_log.statusMessage(statusMessagePrefix()
+            + Messages.getInstance().getString(
+              "Classifier_HandleIncrementalEvent_StatusMessage_Text_Second"));
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_HandleIncrementalEvent_LogMessage_Text_Fifth")
-              + statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_LogMessage_Text_Sixth")
-              + ex.getMessage());
+            "Classifier_HandleIncrementalEvent_LogMessage_Text_Fifth")
+            + statusMessagePrefix()
+            + Messages.getInstance().getString(
+              "Classifier_HandleIncrementalEvent_LogMessage_Text_Sixth")
+            + ex.getMessage());
         }
         ex.printStackTrace();
         return;
@@ -610,10 +613,10 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       if (m_incrementalEvent.getInstance().dataset().classIndex() < 0) {
         // System.err.println("Classifier : setting class index...");
         m_incrementalEvent
-            .getInstance()
-            .dataset()
-            .setClassIndex(
-                m_incrementalEvent.getInstance().dataset().numAttributes() - 1);
+          .getInstance()
+          .dataset()
+          .setClassIndex(
+            m_incrementalEvent.getInstance().dataset().numAttributes() - 1);
       }
 
       int status = IncrementalClassifierEvent.WITHIN_BATCH;
@@ -635,27 +638,30 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // is updateable and user has specified that classifier is to be
       // updated)
       if (m_ClassifierTemplate instanceof weka.classifiers.UpdateableClassifier
-          && m_updateIncrementalClassifier == true
-          && !(m_incrementalEvent.getInstance().isMissing(m_incrementalEvent
-              .getInstance().dataset().classIndex()))) {
+        && m_updateIncrementalClassifier == true
+        && !(m_incrementalEvent.getInstance().isMissing(m_incrementalEvent
+          .getInstance().dataset().classIndex()))) {
         ((weka.classifiers.UpdateableClassifier) m_Classifier)
-            .updateClassifier(m_incrementalEvent.getInstance());
+          .updateClassifier(m_incrementalEvent.getInstance());
       }
       if (m_incrementalEvent.getStatus() == InstanceEvent.BATCH_FINISHED) {
         if (m_textListeners.size() > 0) {
           String modelString = m_Classifier.toString();
           String titleString = m_Classifier.getClass().getName();
 
-          titleString = titleString.substring(titleString.lastIndexOf('.') + 1,
+          titleString =
+            titleString.substring(titleString.lastIndexOf('.') + 1,
               titleString.length());
-          modelString = Messages.getInstance().getString(
+          modelString =
+            Messages.getInstance().getString(
               "Classifier_HandleIncrementalEvent_ModelString_Text_First")
               + titleString
               + "\n"
               + Messages.getInstance().getString(
-                  "Classifier_HandleIncrementalEvent_ModelString_Text_Second")
+                "Classifier_HandleIncrementalEvent_ModelString_Text_Second")
               + m_trainingSet.relationName() + "\n\n" + modelString;
-          titleString = Messages.getInstance().getString(
+          titleString =
+            Messages.getInstance().getString(
               "Classifier_HandleIncrementalEvent_TitleString_Text_First")
               + titleString;
           TextEvent nt = new TextEvent(this, modelString, titleString);
@@ -666,11 +672,11 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       stop();
       if (m_log != null) {
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_HandleIncrementalEvent_LogMessage_Text_Seventh")
-            + statusMessagePrefix() + ex.getMessage());
+          "Classifier_HandleIncrementalEvent_LogMessage_Text_Seventh")
+          + statusMessagePrefix() + ex.getMessage());
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_HandleIncrementalEvent_StatusMessage_Text_Third"));
+          + Messages.getInstance().getString(
+            "Classifier_HandleIncrementalEvent_StatusMessage_Text_Third"));
         ex.printStackTrace();
       } else {
         ex.printStackTrace();
@@ -687,7 +693,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
     private final TaskStatusInfo m_taskInfo = new TaskStatusInfo();
 
     public TrainingTask(int runNum, int maxRunNum, int setNum, int maxSetNum,
-        Instances train) {
+      Instances train) {
       m_runNum = runNum;
       m_maxRunNum = maxRunNum;
       m_setNum = setNum;
@@ -696,28 +702,31 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       m_taskInfo.setExecutionStatus(TaskStatusInfo.TO_BE_RUN);
     }
 
+    @Override
     public void run() {
       execute();
     }
 
+    @Override
     public void execute() {
       try {
         if (m_train != null) {
           if (m_train.classIndex() < 0) {
             // stop all processing
             stop();
-            String errorMessage = statusMessagePrefix()
+            String errorMessage =
+              statusMessagePrefix()
                 + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_ErrorMessage_Text_First");
+                  "Classifier_TrainingTask_Execute_ErrorMessage_Text_First");
             if (m_log != null) {
               m_log.statusMessage(errorMessage);
               m_log.logMessage(Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_LogMessage_Text_First")
-                  + errorMessage);
+                "Classifier_TrainingTask_Execute_LogMessage_Text_First")
+                + errorMessage);
             } else {
               System.err.println(Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_Error_Text_First")
-                  + errorMessage);
+                "Classifier_TrainingTask_Execute_Error_Text_First")
+                + errorMessage);
             }
             return;
 
@@ -739,12 +748,13 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
 
           // m_visual.setAnimated();
           // m_visual.setText("Building model...");
-          String msg = statusMessagePrefix()
+          String msg =
+            statusMessagePrefix()
               + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_Msg_Text_First")
+                "Classifier_TrainingTask_Execute_Msg_Text_First")
               + m_runNum
               + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_Msg_Text_Second") + m_setNum;
+                "Classifier_TrainingTask_Execute_Msg_Text_Second") + m_setNum;
           if (m_log != null) {
             m_log.statusMessage(msg);
           } else {
@@ -753,8 +763,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           // buildClassifier();
 
           // copy the classifier configuration
-          weka.classifiers.Classifier classifierCopy = weka.classifiers.Classifier
-              .makeCopy(m_ClassifierTemplate);
+          weka.classifiers.Classifier classifierCopy =
+            weka.classifiers.Classifier.makeCopy(m_ClassifierTemplate);
 
           // build this model
           classifierCopy.buildClassifier(m_train);
@@ -768,10 +778,11 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           // if (m_batchClassifierListeners.size() > 0) {
           // notify anyone who might be interested in just the model
           // and training set.
-          BatchClassifierEvent ce = new BatchClassifierEvent(Classifier.this,
-              classifierCopy, new DataSetEvent(this, m_train), null, // no test
-                                                                     // set
-                                                                     // (yet)
+          BatchClassifierEvent ce =
+            new BatchClassifierEvent(Classifier.this, classifierCopy,
+              new DataSetEvent(this, m_train), null, // no test
+                                                     // set
+                                                     // (yet)
               m_setNum, m_maxSetNum);
           ce.setGroupIdentifier(m_currentBatchIdentifier.getTime());
           notifyBatchClassifierListeners(ce);
@@ -781,18 +792,20 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           // }
 
           if (classifierCopy instanceof weka.core.Drawable
-              && m_graphListeners.size() > 0) {
+            && m_graphListeners.size() > 0) {
             String grphString = ((weka.core.Drawable) classifierCopy).graph();
             int grphType = ((weka.core.Drawable) classifierCopy).graphType();
             String grphTitle = classifierCopy.getClass().getName();
-            grphTitle = grphTitle.substring(grphTitle.lastIndexOf('.') + 1,
+            grphTitle =
+              grphTitle.substring(grphTitle.lastIndexOf('.') + 1,
                 grphTitle.length());
-            grphTitle = Messages.getInstance().getString(
+            grphTitle =
+              Messages.getInstance().getString(
                 "Classifier_TrainingTask_Execute_GrphTitle_Text_First")
                 + m_setNum + " (" + m_train.relationName() + ") " + grphTitle;
 
-            GraphEvent ge = new GraphEvent(Classifier.this, grphString,
-                grphTitle, grphType);
+            GraphEvent ge =
+              new GraphEvent(Classifier.this, grphString, grphTitle, grphType);
             notifyGraphListeners(ge);
           }
 
@@ -800,24 +813,28 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
             String modelString = classifierCopy.toString();
             String titleString = classifierCopy.getClass().getName();
 
-            titleString = titleString.substring(
-                titleString.lastIndexOf('.') + 1, titleString.length());
-            modelString = Messages.getInstance().getString(
+            titleString =
+              titleString.substring(titleString.lastIndexOf('.') + 1,
+                titleString.length());
+            modelString =
+              Messages.getInstance().getString(
                 "Classifier_TrainingTask_Execute_ModelString_Text_First")
                 + titleString
                 + "\n"
                 + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_ModelString_Text_Second")
+                  "Classifier_TrainingTask_Execute_ModelString_Text_Second")
                 + m_train.relationName()
                 + ((m_maxSetNum > 1) ? Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_ModelString_Text_Third")
-                    + m_setNum : "") + "\n\n" + modelString;
-            titleString = Messages.getInstance().getString(
+                  "Classifier_TrainingTask_Execute_ModelString_Text_Third")
+                  + m_setNum : "") + "\n\n" + modelString;
+            titleString =
+              Messages.getInstance().getString(
                 "Classifier_TrainingTask_Execute_TitleString_Text_First")
                 + titleString;
 
-            TextEvent nt = new TextEvent(Classifier.this, modelString,
-                titleString);
+            TextEvent nt =
+              new TextEvent(Classifier.this, modelString, titleString
+                + (m_maxSetNum > 1 ? (" (fold " + m_setNum + ")") : ""));
             notifyTextListeners(nt);
           }
         }
@@ -826,25 +843,27 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         stop();
         ex.printStackTrace();
         if (m_log != null) {
-          String titleString = Messages.getInstance().getString(
+          String titleString =
+            Messages.getInstance().getString(
               "Classifier_TrainingTask_Execute_TitleString_Text_Second")
               + statusMessagePrefix();
 
-          titleString += Messages.getInstance().getString(
+          titleString +=
+            Messages.getInstance().getString(
               "Classifier_TrainingTask_Execute_TitleString_Text_Third")
               + m_runNum
               + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_TitleString_Text_Fourth")
+                "Classifier_TrainingTask_Execute_TitleString_Text_Fourth")
               + m_setNum
               + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_TitleString_Text_Fifth");
+                "Classifier_TrainingTask_Execute_TitleString_Text_Fifth");
           m_log.logMessage(titleString
-              + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_LogMessage_Text_Fourth")
-              + ex.getMessage());
+            + Messages.getInstance().getString(
+              "Classifier_TrainingTask_Execute_LogMessage_Text_Fourth")
+            + ex.getMessage());
           m_log.statusMessage(statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_StatusMessage_Text_First"));
+            + Messages.getInstance().getString(
+              "Classifier_TrainingTask_Execute_StatusMessage_Text_First"));
           ex.printStackTrace();
         }
         m_taskInfo.setExecutionStatus(TaskStatusInfo.FAILED);
@@ -852,8 +871,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         m_visual.setStatic();
         if (m_log != null) {
           m_log.statusMessage(statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_TrainingTask_Execute_StatusMessage_Text_Second"));
+            + Messages.getInstance().getString(
+              "Classifier_TrainingTask_Execute_StatusMessage_Text_Second"));
         }
         m_state = IDLE;
 
@@ -861,22 +880,23 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           // prevent any classifier events from being fired
           m_trainingSet = null;
           if (m_log != null) {
-            String titleString = Messages.getInstance().getString(
+            String titleString =
+              Messages.getInstance().getString(
                 "Classifier_TrainingTask_Execute_TitleString_Text_Sixth")
                 + statusMessagePrefix();
 
             m_log.logMessage(titleString
-                + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_LogMessage_Text_Fifth")
-                + m_runNum
-                + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_LogMessage_Text_Sixth")
-                + m_setNum
-                + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_LogMessage_Text_Seventh"));
+              + Messages.getInstance().getString(
+                "Classifier_TrainingTask_Execute_LogMessage_Text_Fifth")
+              + m_runNum
+              + Messages.getInstance().getString(
+                "Classifier_TrainingTask_Execute_LogMessage_Text_Sixth")
+              + m_setNum
+              + Messages.getInstance().getString(
+                "Classifier_TrainingTask_Execute_LogMessage_Text_Seventh"));
             m_log.statusMessage(statusMessagePrefix()
-                + Messages.getInstance().getString(
-                    "Classifier_TrainingTask_Execute_LogMessage_Text_Seventh"));
+              + Messages.getInstance().getString(
+                "Classifier_TrainingTask_Execute_LogMessage_Text_Seventh"));
 
             /*
              * // are we the last active thread? if
@@ -909,6 +929,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       }
     }
 
+    @Override
     public TaskStatusInfo getTaskStatus() {
       // TODO
       return null;
@@ -920,6 +941,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param e a <code>TrainingSetEvent</code> value
    */
+  @Override
   public void acceptTrainingSet(final TrainingSetEvent e) {
 
     if (e.isStructureOnly()) {
@@ -927,9 +949,10 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // BatchClassifierEvent in order to pass on instance structure to
       // any listeners - eg. PredictionAppender can use it to determine
       // the final structure of instances with predictions appended
-      BatchClassifierEvent ce = new BatchClassifierEvent(this, m_Classifier,
-          new DataSetEvent(this, e.getTrainingSet()), new DataSetEvent(this,
-              e.getTrainingSet()), e.getSetNumber(), e.getMaxSetNumber());
+      BatchClassifierEvent ce =
+        new BatchClassifierEvent(this, m_Classifier, new DataSetEvent(this,
+          e.getTrainingSet()), new DataSetEvent(this, e.getTrainingSet()),
+          e.getSetNumber(), e.getMaxSetNumber());
 
       notifyBatchClassifierListeners(ce);
       return;
@@ -939,13 +962,13 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // block(true);
       if (m_log != null) {
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_AcceptTrainingSet_StatusMessage_Text_First"));
+          + Messages.getInstance().getString(
+            "Classifier_AcceptTrainingSet_StatusMessage_Text_First"));
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_AcceptTrainingSet_LogMessage_Text_First")
-            + statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_AcceptTrainingSet_LogMessage_Text_Second"));
+          "Classifier_AcceptTrainingSet_LogMessage_Text_First")
+          + statusMessagePrefix()
+          + Messages.getInstance().getString(
+            "Classifier_AcceptTrainingSet_LogMessage_Text_Second"));
       }
       return;
     }
@@ -957,14 +980,15 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       m_trainingSet = new Instances(e.getTrainingSet(), 0);
       m_state = BUILDING_MODEL;
 
-      String msg = Messages.getInstance().getString(
+      String msg =
+        Messages.getInstance().getString(
           "Classifier_AcceptTrainingSet_Msg_Text_First")
           + statusMessagePrefix()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTrainingSet_Msg_Text_Second")
+            "Classifier_AcceptTrainingSet_Msg_Text_Second")
           + getExecutionSlots()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTrainingSet_Msg_Text_Third");
+            "Classifier_AcceptTrainingSet_Msg_Text_Third");
       if (m_log != null) {
         m_log.logMessage(msg);
       } else {
@@ -979,11 +1003,12 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // }
 
       // setup output queues
-      msg = Messages.getInstance().getString(
+      msg =
+        Messages.getInstance().getString(
           "Classifier_AcceptTrainingSet_Msg_Text_Fourth")
           + statusMessagePrefix()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTrainingSet_Msg_Text_Fifth");
+            "Classifier_AcceptTrainingSet_Msg_Text_Fifth");
       if (m_log != null) {
         m_log.logMessage(msg);
       } else {
@@ -991,8 +1016,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       }
 
       if (!m_batchStarted) {
-        m_outputQueues = new BatchClassifierEvent[e.getMaxRunNumber()][e
-            .getMaxSetNumber()];
+        m_outputQueues =
+          new BatchClassifierEvent[e.getMaxRunNumber()][e.getMaxSetNumber()];
         m_completedSets = new boolean[e.getMaxRunNumber()][e.getMaxSetNumber()];
         m_currentBatchIdentifier = new Date();
         m_batchStarted = true;
@@ -1000,20 +1025,21 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
     }
 
     // create a new task and schedule for execution
-    TrainingTask newTask = new TrainingTask(e.getRunNumber(),
-        e.getMaxRunNumber(), e.getSetNumber(), e.getMaxSetNumber(),
-        e.getTrainingSet());
-    String msg = Messages.getInstance().getString(
+    TrainingTask newTask =
+      new TrainingTask(e.getRunNumber(), e.getMaxRunNumber(), e.getSetNumber(),
+        e.getMaxSetNumber(), e.getTrainingSet());
+    String msg =
+      Messages.getInstance().getString(
         "Classifier_AcceptTrainingSet_Msg_Text_Sixth")
         + statusMessagePrefix()
         + Messages.getInstance().getString(
-            "Classifier_AcceptTrainingSet_Msg_Text_Seventh")
+          "Classifier_AcceptTrainingSet_Msg_Text_Seventh")
         + e.getRunNumber()
         + Messages.getInstance().getString(
-            "Classifier_AcceptTrainingSet_Msg_Text_Eighth")
+          "Classifier_AcceptTrainingSet_Msg_Text_Eighth")
         + e.getSetNumber()
         + Messages.getInstance().getString(
-            "Classifier_AcceptTrainingSet_Msg_Text_Nineth");
+          "Classifier_AcceptTrainingSet_Msg_Text_Nineth");
     if (m_log != null) {
       m_log.logMessage(msg);
     } else {
@@ -1032,19 +1058,20 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param e a <code>TestSetEvent</code> value
    */
+  @Override
   public synchronized void acceptTestSet(TestSetEvent e) {
 
     if (m_block) {
       // block(true);
       if (m_log != null) {
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_AcceptTrainingSet_StatusMessage_Text_Second"));
+          + Messages.getInstance().getString(
+            "Classifier_AcceptTrainingSet_StatusMessage_Text_Second"));
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_AcceptTrainingSet_Msg_Text_Nineth")
-            + statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_AcceptTrainingSet_StatusMessage_Text_Second"));
+          "Classifier_AcceptTrainingSet_Msg_Text_Nineth")
+          + statusMessagePrefix()
+          + Messages.getInstance().getString(
+            "Classifier_AcceptTrainingSet_StatusMessage_Text_Second"));
       }
       return;
     }
@@ -1055,18 +1082,19 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         // testSet.setClassIndex(testSet.numAttributes() - 1);
         // stop all processing
         stop();
-        String errorMessage = statusMessagePrefix()
+        String errorMessage =
+          statusMessagePrefix()
             + Messages.getInstance().getString(
-                "Classifier_AcceptTestSet_ErrorMessage_Text_First");
+              "Classifier_AcceptTestSet_ErrorMessage_Text_First");
         if (m_log != null) {
           m_log.statusMessage(errorMessage);
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_LogMessage_Text_First")
-              + errorMessage);
+            "Classifier_AcceptTestSet_LogMessage_Text_First")
+            + errorMessage);
         } else {
           System.err.println(Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_Error_Text_First")
-              + errorMessage);
+            "Classifier_AcceptTestSet_Error_Text_First")
+            + errorMessage);
         }
         return;
       }
@@ -1077,7 +1105,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
     // currently building a model), then use the
     // last saved model
     if (m_Classifier != null && m_state == IDLE
-        && (!m_listenees.containsKey("trainingSet"))) {
+      && (!m_listenees.containsKey("trainingSet"))) {
 
       // if this is structure only then just return at this point
       if (e.getTestSet() != null && e.isStructureOnly()) {
@@ -1088,18 +1116,19 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       // then it means that no model has been loaded
       if (m_trainingSet == null) {
         stop();
-        String errorMessage = statusMessagePrefix()
+        String errorMessage =
+          statusMessagePrefix()
             + Messages.getInstance().getString(
-                "Classifier_AcceptTestSet_ErrorMessage_Text_First_Alpha");
+              "Classifier_AcceptTestSet_ErrorMessage_Text_First_Alpha");
         if (m_log != null) {
           m_log.statusMessage(errorMessage);
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_LogMessage_Text_Second")
-              + errorMessage);
+            "Classifier_AcceptTestSet_LogMessage_Text_Second")
+            + errorMessage);
         } else {
           System.err.println(Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_Error_Text_Second")
-              + errorMessage);
+            "Classifier_AcceptTestSet_Error_Text_Second")
+            + errorMessage);
         }
         return;
       }
@@ -1116,16 +1145,17 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
          */
 
         if (m_trainingSet.equalHeaders(testSet)) {
-          BatchClassifierEvent ce = new BatchClassifierEvent(this,
-              m_Classifier, new DataSetEvent(this, m_trainingSet),
-              new DataSetEvent(this, e.getTestSet()), e.getRunNumber(),
-              e.getMaxRunNumber(), e.getSetNumber(), e.getMaxSetNumber());
+          BatchClassifierEvent ce =
+            new BatchClassifierEvent(this, m_Classifier, new DataSetEvent(this,
+              m_trainingSet), new DataSetEvent(this, e.getTestSet()),
+              e.getRunNumber(), e.getMaxRunNumber(), e.getSetNumber(),
+              e.getMaxSetNumber());
           ce.setGroupIdentifier(m_currentBatchIdentifier.getTime());
 
           if (m_log != null && !e.isStructureOnly()) {
             m_log.statusMessage(statusMessagePrefix()
-                + Messages.getInstance().getString(
-                    "Classifier_AcceptTestSet_StatusMessage_Text_First"));
+              + Messages.getInstance().getString(
+                "Classifier_AcceptTestSet_StatusMessage_Text_First"));
           }
           m_batchStarted = false;
           notifyBatchClassifierListeners(ce);
@@ -1138,10 +1168,10 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
        */
       if (e.getRunNumber() == 1 && e.getSetNumber() == 1) {
         if (!m_batchStarted) {
-          m_outputQueues = new BatchClassifierEvent[e.getMaxRunNumber()][e
-              .getMaxSetNumber()];
-          m_completedSets = new boolean[e.getMaxRunNumber()][e
-              .getMaxSetNumber()];
+          m_outputQueues =
+            new BatchClassifierEvent[e.getMaxRunNumber()][e.getMaxSetNumber()];
+          m_completedSets =
+            new boolean[e.getMaxRunNumber()][e.getMaxSetNumber()];
           m_currentBatchIdentifier = new Date();
           m_batchStarted = true;
         }
@@ -1150,13 +1180,13 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       if (m_outputQueues[e.getRunNumber() - 1][e.getSetNumber() - 1] == null) {
         // store an event with a null model and training set (to be filled in
         // later)
-        m_outputQueues[e.getRunNumber() - 1][e.getSetNumber() - 1] = new BatchClassifierEvent(
-            this, null, null, new DataSetEvent(this, e.getTestSet()),
-            e.getRunNumber(), e.getMaxRunNumber(), e.getSetNumber(),
-            e.getMaxSetNumber());
+        m_outputQueues[e.getRunNumber() - 1][e.getSetNumber() - 1] =
+          new BatchClassifierEvent(this, null, null, new DataSetEvent(this,
+            e.getTestSet()), e.getRunNumber(), e.getMaxRunNumber(),
+            e.getSetNumber(), e.getMaxSetNumber());
 
         if (e.getRunNumber() == e.getMaxRunNumber()
-            && e.getSetNumber() == e.getMaxSetNumber()) {
+          && e.getSetNumber() == e.getMaxSetNumber()) {
 
           // block on the last fold of the last run
           /*
@@ -1170,9 +1200,9 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       } else {
         // Otherwise, there is a model here waiting for a test set...
         m_outputQueues[e.getRunNumber() - 1][e.getSetNumber() - 1]
-            .setTestSet(new DataSetEvent(this, e.getTestSet()));
+          .setTestSet(new DataSetEvent(this, e.getTestSet()));
         checkCompletedRun(e.getRunNumber(), e.getMaxRunNumber(),
-            e.getMaxSetNumber());
+          e.getMaxSetNumber());
       }
     }
   }
@@ -1180,14 +1210,15 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   private synchronized void classifierTrainingComplete(BatchClassifierEvent ce) {
     // check the output queues if we have an incoming test set connection
     if (m_listenees.containsKey("testSet")) {
-      String msg = Messages.getInstance().getString(
+      String msg =
+        Messages.getInstance().getString(
           "Classifier_AcceptTestSet_Msg_Text_First")
           + statusMessagePrefix()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_Msg_Text_Second")
+            "Classifier_AcceptTestSet_Msg_Text_Second")
           + ce.getRunNumber()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_Msg_Text_Third") + ce.getSetNumber();
+            "Classifier_AcceptTestSet_Msg_Text_Third") + ce.getSetNumber();
       if (m_log != null) {
         m_log.logMessage(msg);
       } else {
@@ -1200,34 +1231,35 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       } else {
         // there is a test set here waiting for a model and training set
         m_outputQueues[ce.getRunNumber() - 1][ce.getSetNumber() - 1]
-            .setClassifier(ce.getClassifier());
+          .setClassifier(ce.getClassifier());
         m_outputQueues[ce.getRunNumber() - 1][ce.getSetNumber() - 1]
-            .setTrainSet(ce.getTrainSet());
+          .setTrainSet(ce.getTrainSet());
 
       }
       checkCompletedRun(ce.getRunNumber(), ce.getMaxRunNumber(),
-          ce.getMaxSetNumber());
+        ce.getMaxSetNumber());
     }
   }
 
   private synchronized void checkCompletedRun(int runNum, int maxRunNum,
-      int maxSets) {
+    int maxSets) {
     // look to see if there are any completed classifiers that we can pass
     // on for evaluation
     for (int i = 0; i < maxSets; i++) {
       if (m_outputQueues[runNum - 1][i] != null) {
         if (m_outputQueues[runNum - 1][i].getClassifier() != null
-            && m_outputQueues[runNum - 1][i].getTestSet() != null) {
-          String msg = Messages.getInstance().getString(
+          && m_outputQueues[runNum - 1][i].getTestSet() != null) {
+          String msg =
+            Messages.getInstance().getString(
               "Classifier_AcceptTestSet_Msg_Text_Fourth")
               + statusMessagePrefix()
               + Messages.getInstance().getString(
-                  "Classifier_AcceptTestSet_Msg_Text_Fifth")
+                "Classifier_AcceptTestSet_Msg_Text_Fifth")
               + runNum
               + "/"
               + (i + 1)
               + Messages.getInstance().getString(
-                  "Classifier_AcceptTestSet_Msg_Text_Sixth");
+                "Classifier_AcceptTestSet_Msg_Text_Sixth");
           if (m_log != null) {
             m_log.logMessage(msg);
           } else {
@@ -1236,7 +1268,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
 
           // dispatch this one
           m_outputQueues[runNum - 1][i]
-              .setGroupIdentifier(m_currentBatchIdentifier.getTime());
+            .setGroupIdentifier(m_currentBatchIdentifier.getTime());
           notifyBatchClassifierListeners(m_outputQueues[runNum - 1][i]);
           // save memory
           m_outputQueues[runNum - 1][i] = null;
@@ -1261,11 +1293,12 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
     }
 
     if (done) {
-      String msg = Messages.getInstance().getString(
+      String msg =
+        Messages.getInstance().getString(
           "Classifier_AcceptTestSet_Msg_Text_Seventh")
           + statusMessagePrefix()
           + Messages.getInstance().getString(
-              "Classifier_AcceptTestSet_Msg_Text_Eighth");
+            "Classifier_AcceptTestSet_Msg_Text_Eighth");
 
       if (m_log != null) {
         m_log.logMessage(msg);
@@ -1276,8 +1309,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
 
       if (m_log != null) {
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_AcceptTestSet_StatusMessage_Text_Second"));
+          + Messages.getInstance().getString(
+            "Classifier_AcceptTestSet_StatusMessage_Text_Second"));
       }
       // m_outputQueues = null; // free memory
 
@@ -1318,6 +1351,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param newVisual a <code>BeanVisual</code> value
    */
+  @Override
   public void setVisual(BeanVisual newVisual) {
     m_visual = newVisual;
   }
@@ -1325,6 +1359,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   /**
    * Gets the visual appearance of this wrapper bean
    */
+  @Override
   public BeanVisual getVisual() {
     return m_visual;
   }
@@ -1332,17 +1367,19 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   /**
    * Use the default visual appearance for this bean
    */
+  @Override
   public void useDefaultVisual() {
     // try to get a default for this package of classifiers
     String name = m_ClassifierTemplate.getClass().toString();
     String packageName = name.substring(0, name.lastIndexOf('.'));
-    packageName = packageName.substring(packageName.lastIndexOf('.') + 1,
+    packageName =
+      packageName.substring(packageName.lastIndexOf('.') + 1,
         packageName.length());
     if (!m_visual.loadIcons(BeanVisual.ICON_PATH + "Default_" + packageName
-        + "Classifier.gif", BeanVisual.ICON_PATH + "Default_" + packageName
-        + "Classifier_animated.gif")) {
+      + "Classifier.gif", BeanVisual.ICON_PATH + "Default_" + packageName
+      + "Classifier_animated.gif")) {
       m_visual.loadIcons(BeanVisual.ICON_PATH + "DefaultClassifier.gif",
-          BeanVisual.ICON_PATH + "DefaultClassifier_animated.gif");
+        BeanVisual.ICON_PATH + "DefaultClassifier_animated.gif");
     }
   }
 
@@ -1361,7 +1398,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param cl a <code>BatchClassifierListener</code> value
    */
   public synchronized void removeBatchClassifierListener(
-      BatchClassifierListener cl) {
+    BatchClassifierListener cl) {
     m_batchClassifierListeners.remove(cl);
   }
 
@@ -1464,7 +1501,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param cl an <code>IncrementalClassifierListener</code> value
    */
   public synchronized void addIncrementalClassifierListener(
-      IncrementalClassifierListener cl) {
+    IncrementalClassifierListener cl) {
     m_incrementalClassifierListeners.add(cl);
   }
 
@@ -1474,7 +1511,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param cl an <code>IncrementalClassifierListener</code> value
    */
   public synchronized void removeIncrementalClassifierListener(
-      IncrementalClassifierListener cl) {
+    IncrementalClassifierListener cl) {
     m_incrementalClassifierListeners.remove(cl);
   }
 
@@ -1485,7 +1522,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param ce an <code>IncrementalClassifierEvent</code> value
    */
   private void notifyIncrementalClassifierListeners(
-      IncrementalClassifierEvent ce) {
+    IncrementalClassifierEvent ce) {
     // don't do anything if the thread that we've been running in has been
     // interrupted
     if (Thread.currentThread().isInterrupted()) {
@@ -1510,6 +1547,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param eventName the event
    * @return true if the object will accept a connection
    */
+  @Override
   public boolean connectionAllowed(String eventName) {
     /*
      * if (eventName.compareTo("instance") == 0) { if (!(m_Classifier instanceof
@@ -1528,6 +1566,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param esd the EventSetDescriptor
    * @return true if the object will accept a connection
    */
+  @Override
   public boolean connectionAllowed(EventSetDescriptor esd) {
     return connectionAllowed(esd.getName());
   }
@@ -1540,20 +1579,22 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param source the source with which this object has been registered as a
    *          listener
    */
+  @Override
   public synchronized void connectionNotification(String eventName,
-      Object source) {
+    Object source) {
     if (eventName.compareTo("instance") == 0) {
       if (!(m_ClassifierTemplate instanceof weka.classifiers.UpdateableClassifier)) {
         if (m_log != null) {
-          String msg = statusMessagePrefix()
+          String msg =
+            statusMessagePrefix()
               + Messages.getInstance().getString(
-                  "Classifier_ConnectionNotification_Msg_Text_First")
+                "Classifier_ConnectionNotification_Msg_Text_First")
               + m_ClassifierTemplate.getClass().getName()
               + Messages.getInstance().getString(
-                  "Classifier_ConnectionNotification_Msg_Text_Second");
+                "Classifier_ConnectionNotification_Msg_Text_Second");
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_ConnectionNotification_LogMessage_Text_First")
-              + msg);
+            "Classifier_ConnectionNotification_LogMessage_Text_First")
+            + msg);
           m_log.statusMessage(msg);
         }
       }
@@ -1576,8 +1617,9 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param source the source with which this object has been registered as a
    *          listener
    */
+  @Override
   public synchronized void disconnectionNotification(String eventName,
-      Object source) {
+    Object source) {
     m_listenees.remove(eventName);
     if (eventName.compareTo("instance") == 0) {
       stop(); // kill the incremental handler thread if it is running
@@ -1608,6 +1650,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
   /**
    * Stop any classifier action
    */
+  @Override
   public void stop() {
     // tell all listenees (upstream beans) to stop
     Enumeration en = m_listenees.keys();
@@ -1651,19 +1694,22 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         // add extension if necessary
         if (m_fileChooser.getFileFilter() == m_binaryFilter) {
           if (!loadFrom.getName().toLowerCase().endsWith("." + FILE_EXTENSION)) {
-            loadFrom = new File(loadFrom.getParent(), loadFrom.getName() + "."
+            loadFrom =
+              new File(loadFrom.getParent(), loadFrom.getName() + "."
                 + FILE_EXTENSION);
           }
         } else if (m_fileChooser.getFileFilter() == m_KOMLFilter) {
           if (!loadFrom.getName().toLowerCase()
-              .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION)) {
-            loadFrom = new File(loadFrom.getParent(), loadFrom.getName()
+            .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION)) {
+            loadFrom =
+              new File(loadFrom.getParent(), loadFrom.getName()
                 + KOML.FILE_EXTENSION + FILE_EXTENSION);
           }
         } else if (m_fileChooser.getFileFilter() == m_XStreamFilter) {
           if (!loadFrom.getName().toLowerCase()
-              .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION)) {
-            loadFrom = new File(loadFrom.getParent(), loadFrom.getName()
+            .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION)) {
+            loadFrom =
+              new File(loadFrom.getParent(), loadFrom.getName()
                 + XStream.FILE_EXTENSION + FILE_EXTENSION);
           }
         }
@@ -1672,8 +1718,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         Instances tempHeader = null;
         // KOML ?
         if ((KOML.isPresent())
-            && (loadFrom.getAbsolutePath().toLowerCase()
-                .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION))) {
+          && (loadFrom.getAbsolutePath().toLowerCase()
+            .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION))) {
           Vector v = (Vector) KOML.read(loadFrom.getAbsolutePath());
           temp = (weka.classifiers.Classifier) v.elementAt(0);
           if (v.size() == 2) {
@@ -1681,8 +1727,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
             tempHeader = (Instances) v.elementAt(1);
           }
         } /* XStream */else if ((XStream.isPresent())
-            && (loadFrom.getAbsolutePath().toLowerCase()
-                .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION))) {
+          && (loadFrom.getAbsolutePath().toLowerCase()
+            .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION))) {
           Vector v = (Vector) XStream.read(loadFrom.getAbsolutePath());
           temp = (weka.classifiers.Classifier) v.elementAt(0);
           if (v.size() == 2) {
@@ -1691,8 +1737,9 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           }
         } /* binary */else {
 
-          ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(
-              new FileInputStream(loadFrom)));
+          ObjectInputStream is =
+            new ObjectInputStream(new BufferedInputStream(new FileInputStream(
+              loadFrom)));
           // try and read the model
           temp = (weka.classifiers.Classifier) is.readObject();
           // try and read the header (if present)
@@ -1711,43 +1758,40 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         m_trainingSet = tempHeader;
 
         if (m_log != null) {
-          m_log
-              .statusMessage(statusMessagePrefix()
-                  + Messages
-                      .getInstance()
-                      .getString(
-                          "Classifier_ConnectionNotification_StatusMessage_Text_First"));
+          m_log.statusMessage(statusMessagePrefix()
+            + Messages.getInstance().getString(
+              "Classifier_ConnectionNotification_StatusMessage_Text_First"));
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_ConnectionNotification_LogMessage_Text_Second")
-              + statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_ConnectionNotification_LogMessage_Text_Third")
-              + m_Classifier.getClass().toString());
+            "Classifier_ConnectionNotification_LogMessage_Text_Second")
+            + statusMessagePrefix()
+            + Messages.getInstance().getString(
+              "Classifier_ConnectionNotification_LogMessage_Text_Third")
+            + m_Classifier.getClass().toString());
         }
       }
     } catch (Exception ex) {
       JOptionPane
-          .showMessageDialog(
-              Classifier.this,
-              Messages
-                  .getInstance()
-                  .getString(
-                      "Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_First"),
-              Messages
-                  .getInstance()
-                  .getString(
-                      "Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_Second"),
-              JOptionPane.ERROR_MESSAGE);
+        .showMessageDialog(
+          Classifier.this,
+          Messages
+            .getInstance()
+            .getString(
+              "Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_First"),
+          Messages
+            .getInstance()
+            .getString(
+              "Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_Second"),
+          JOptionPane.ERROR_MESSAGE);
       if (m_log != null) {
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_ConnectionNotification_StatusMessage_Text_Second"));
+          + Messages.getInstance().getString(
+            "Classifier_ConnectionNotification_StatusMessage_Text_Second"));
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_ConnectionNotification_LogMessage_Text_Fourth")
-            + statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_ConnectionNotification_LogMessage_Text_Fifth")
-            + ex.getMessage());
+          "Classifier_ConnectionNotification_LogMessage_Text_Fourth")
+          + statusMessagePrefix()
+          + Messages.getInstance().getString(
+            "Classifier_ConnectionNotification_LogMessage_Text_Fifth")
+          + ex.getMessage());
       }
     }
   }
@@ -1772,7 +1816,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
           }
         } else if (m_fileChooser.getFileFilter() == m_XStreamFilter) {
           if (!fn.toLowerCase().endsWith(
-              XStream.FILE_EXTENSION + FILE_EXTENSION)) {
+            XStream.FILE_EXTENSION + FILE_EXTENSION)) {
             fn += XStream.FILE_EXTENSION + FILE_EXTENSION;
           }
         }
@@ -1781,29 +1825,30 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         // now serialize model
         // KOML?
         if ((KOML.isPresent())
-            && saveTo.getAbsolutePath().toLowerCase()
-                .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION)) {
+          && saveTo.getAbsolutePath().toLowerCase()
+            .endsWith(KOML.FILE_EXTENSION + FILE_EXTENSION)) {
           SerializedModelSaver.saveKOML(saveTo, m_Classifier,
-              (m_trainingSet != null) ? new Instances(m_trainingSet, 0) : null);
+            (m_trainingSet != null) ? new Instances(m_trainingSet, 0) : null);
           /*
            * Vector v = new Vector(); v.add(m_Classifier); if (m_trainingSet !=
            * null) { v.add(new Instances(m_trainingSet, 0)); } v.trimToSize();
            * KOML.write(saveTo.getAbsolutePath(), v);
            */
         } /* XStream */else if ((XStream.isPresent())
-            && saveTo.getAbsolutePath().toLowerCase()
-                .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION)) {
+          && saveTo.getAbsolutePath().toLowerCase()
+            .endsWith(XStream.FILE_EXTENSION + FILE_EXTENSION)) {
 
           SerializedModelSaver.saveXStream(saveTo, m_Classifier,
-              (m_trainingSet != null) ? new Instances(m_trainingSet, 0) : null);
+            (m_trainingSet != null) ? new Instances(m_trainingSet, 0) : null);
           /*
            * Vector v = new Vector(); v.add(m_Classifier); if (m_trainingSet !=
            * null) { v.add(new Instances(m_trainingSet, 0)); } v.trimToSize();
            * XStream.write(saveTo.getAbsolutePath(), v);
            */
         } else /* binary */{
-          ObjectOutputStream os = new ObjectOutputStream(
-              new BufferedOutputStream(new FileOutputStream(saveTo)));
+          ObjectOutputStream os =
+            new ObjectOutputStream(new BufferedOutputStream(
+              new FileOutputStream(saveTo)));
           os.writeObject(m_Classifier);
           if (m_trainingSet != null) {
             Instances header = new Instances(m_trainingSet, 0);
@@ -1813,39 +1858,34 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
         }
         if (m_log != null) {
           m_log.statusMessage(statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_SaveModel_StatusMessage_Text_First"));
+            + Messages.getInstance().getString(
+              "Classifier_SaveModel_StatusMessage_Text_First"));
           m_log.logMessage(Messages.getInstance().getString(
-              "Classifier_SaveModel_LogMessage_Text_First")
-              + statusMessagePrefix()
-              + Messages.getInstance().getString(
-                  "Classifier_SaveModel_LogMessage_Text_Second")
-              + getCustomName());
+            "Classifier_SaveModel_LogMessage_Text_First")
+            + statusMessagePrefix()
+            + Messages.getInstance().getString(
+              "Classifier_SaveModel_LogMessage_Text_Second") + getCustomName());
         }
       }
     } catch (Exception ex) {
-      JOptionPane
-          .showMessageDialog(
-              Classifier.this,
-              Messages
-                  .getInstance()
-                  .getString(
-                      "Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_First"),
-              Messages
-                  .getInstance()
-                  .getString(
-                      "Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_Second"),
-              JOptionPane.ERROR_MESSAGE);
+      JOptionPane.showMessageDialog(
+        Classifier.this,
+        Messages.getInstance().getString(
+          "Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_First"),
+        Messages.getInstance().getString(
+          "Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_Second"),
+        JOptionPane.ERROR_MESSAGE);
       if (m_log != null) {
         m_log.statusMessage(statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_SaveModel_StatusMessage_Text_Second"));
+          + Messages.getInstance().getString(
+            "Classifier_SaveModel_StatusMessage_Text_Second"));
         m_log.logMessage(Messages.getInstance().getString(
-            "Classifier_SaveModel_LogMessage_Text_Third")
-            + statusMessagePrefix()
-            + Messages.getInstance().getString(
-                "Classifier_SaveModel_LogMessage_Text_Fourth")
-            + getCustomName() + ex.getMessage());
+          "Classifier_SaveModel_LogMessage_Text_Third")
+          + statusMessagePrefix()
+          + Messages.getInstance().getString(
+            "Classifier_SaveModel_LogMessage_Text_Fourth")
+          + getCustomName()
+          + ex.getMessage());
       }
     }
   }
@@ -1855,6 +1895,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @param logger a <code>Logger</code> value
    */
+  @Override
   public void setLog(Logger logger) {
     m_log = logger;
   }
@@ -1864,22 +1905,23 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @return an <code>Enumeration</code> value
    */
+  @Override
   public Enumeration enumerateRequests() {
     Vector newVector = new Vector(0);
     if (m_executorPool != null
-        && (m_executorPool.getQueue().size() > 0 || m_executorPool
-            .getActiveCount() > 0)) {
+      && (m_executorPool.getQueue().size() > 0 || m_executorPool
+        .getActiveCount() > 0)) {
       newVector.addElement("Stop");
     }
 
     if ((m_executorPool == null || (m_executorPool.getQueue().size() == 0 && m_executorPool
-        .getActiveCount() == 0)) && m_Classifier != null) {
+      .getActiveCount() == 0)) && m_Classifier != null) {
       newVector.addElement("Save model");
     }
 
     if (m_executorPool == null
-        || (m_executorPool.getQueue().size() == 0 && m_executorPool
-            .getActiveCount() == 0)) {
+      || (m_executorPool.getQueue().size() == 0 && m_executorPool
+        .getActiveCount() == 0)) {
       newVector.addElement("Load model");
     }
     return newVector.elements();
@@ -1891,6 +1933,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param request the request to perform
    * @exception IllegalArgumentException if an error occurs
    */
+  @Override
   public void performRequest(String request) {
     if (request.compareTo("Stop") == 0) {
       stop();
@@ -1900,8 +1943,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
       loadModel();
     } else {
       throw new IllegalArgumentException(request
-          + Messages.getInstance().getString(
-              "Classifier_PerformRequest_IllegalArgumentException_Text"));
+        + Messages.getInstance().getString(
+          "Classifier_PerformRequest_IllegalArgumentException_Text"));
     }
   }
 
@@ -1924,8 +1967,8 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    */
   private boolean generatableEvent(String eventName) {
     if (eventName.compareTo("graph") == 0 || eventName.compareTo("text") == 0
-        || eventName.compareTo("batchClassifier") == 0
-        || eventName.compareTo("incrementalClassifier") == 0) {
+      || eventName.compareTo("batchClassifier") == 0
+      || eventName.compareTo("incrementalClassifier") == 0) {
       return true;
     }
     return false;
@@ -1939,6 +1982,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * @param eventName the name of the event in question
    * @return true if the named event could be generated at this point in time
    */
+  @Override
   public boolean eventGeneratable(String eventName) {
     if (!generatableEvent(eventName)) {
       return false;
@@ -1970,7 +2014,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
        * return false; }
        */
       if (!m_listenees.containsKey("testSet")
-          && !m_listenees.containsKey("trainingSet")) {
+        && !m_listenees.containsKey("trainingSet")) {
         return false;
       }
       Object source = m_listenees.get("testSet");
@@ -1989,7 +2033,7 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
 
     if (eventName.compareTo("text") == 0) {
       if (!m_listenees.containsKey("trainingSet")
-          && !m_listenees.containsKey("instance")) {
+        && !m_listenees.containsKey("instance")) {
         return false;
       }
       Object source = m_listenees.get("trainingSet");
@@ -2030,10 +2074,11 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
    * 
    * @return true if the bean is busy.
    */
+  @Override
   public boolean isBusy() {
     if (m_executorPool == null
-        || (m_executorPool.getQueue().size() == 0 && m_executorPool
-            .getActiveCount() == 0) && m_state == IDLE) {
+      || (m_executorPool.getQueue().size() == 0 && m_executorPool
+        .getActiveCount() == 0) && m_state == IDLE) {
       return false;
     }
     /*
@@ -2045,12 +2090,12 @@ public class Classifier extends JPanel implements BeanCommon, Visible,
 
   private String statusMessagePrefix() {
     return getCustomName()
-        + "$"
-        + hashCode()
-        + "|"
-        + ((m_Classifier instanceof OptionHandler && Utils.joinOptions(
-            ((OptionHandler) m_ClassifierTemplate).getOptions()).length() > 0) ? Utils
-            .joinOptions(((OptionHandler) m_ClassifierTemplate).getOptions())
-            + "|" : "");
+      + "$"
+      + hashCode()
+      + "|"
+      + ((m_Classifier instanceof OptionHandler && Utils.joinOptions(
+        ((OptionHandler) m_ClassifierTemplate).getOptions()).length() > 0) ? Utils
+        .joinOptions(((OptionHandler) m_ClassifierTemplate).getOptions()) + "|"
+        : "");
   }
 }
diff --git a/src/main/java/weka/gui/beans/TextViewer.java b/src/main/java/weka/gui/beans/TextViewer.java
index 4ef97e2..757cb45 100644
--- a/src/main/java/weka/gui/beans/TextViewer.java
+++ b/src/main/java/weka/gui/beans/TextViewer.java
@@ -22,10 +22,6 @@
 
 package weka.gui.beans;
 
-import weka.gui.ResultHistoryPanel;
-import weka.gui.SaveBuffer;
-import weka.gui.Logger;
-
 import java.awt.BorderLayout;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -50,29 +46,28 @@ import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
 import javax.swing.JTextArea;
 
+import weka.gui.Logger;
+import weka.gui.ResultHistoryPanel;
+import weka.gui.SaveBuffer;
+
 /**
  * Bean that collects and displays pieces of text
- *
+ * 
  * @author <a href="mailto:mhall at cs.waikato.ac.nz">Mark Hall</a>
- * @version $Revision: 7059 $
+ * @version $Revision: 10820 $
  */
-public class TextViewer 
-  extends JPanel
-  implements TextListener, DataSourceListener, 
-	     TrainingSetListener, TestSetListener,
-	     Visible, UserRequestAcceptor, 
-	     BeanContextChild,
-             BeanCommon,
-             EventConstraints {
+public class TextViewer extends JPanel implements TextListener,
+  DataSourceListener, TrainingSetListener, TestSetListener, Visible,
+  UserRequestAcceptor, BeanContextChild, BeanCommon, EventConstraints {
 
   /** for serialization */
   private static final long serialVersionUID = 104838186352536832L;
 
   protected BeanVisual m_visual;
 
-
   private transient JFrame m_resultsFrame = null;
 
   /**
@@ -89,7 +84,7 @@ public class TextViewer
    * True if this bean's appearance is the design mode appearance
    */
   protected boolean m_design;
-  
+
   /**
    * BeanContex that this bean might be contained within
    */
@@ -98,23 +93,21 @@ public class TextViewer
   /**
    * BeanContextChild support
    */
-  protected BeanContextChildSupport m_bcSupport = 
-    new BeanContextChildSupport(this);
+  protected BeanContextChildSupport m_bcSupport = new BeanContextChildSupport(
+    this);
 
   /**
    * Objects listening for text events
    */
-  private Vector m_textListeners = new Vector();
-
-  private transient Logger m_log = null;
+  private final Vector m_textListeners = new Vector();
 
-  
   public TextViewer() {
-    /*    setUpResultHistory();
-    setLayout(new BorderLayout());
-    add(m_visual, BorderLayout.CENTER); */
-    java.awt.GraphicsEnvironment ge = 
-      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); 
+    /*
+     * setUpResultHistory(); setLayout(new BorderLayout()); add(m_visual,
+     * BorderLayout.CENTER);
+     */
+    java.awt.GraphicsEnvironment ge =
+      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
     if (!ge.isHeadless()) {
       appearanceFinal();
     }
@@ -123,9 +116,9 @@ public class TextViewer
   protected void appearanceDesign() {
     setUpResultHistory();
     removeAll();
-    m_visual =  new BeanVisual("TextViewer", 
-			       BeanVisual.ICON_PATH+"DefaultText.gif",
-			       BeanVisual.ICON_PATH+"DefaultText_animated.gif");
+    m_visual =
+      new BeanVisual("TextViewer", BeanVisual.ICON_PATH + "DefaultText.gif",
+        BeanVisual.ICON_PATH + "DefaultText_animated.gif");
     setLayout(new BorderLayout());
     add(m_visual, BorderLayout.CENTER);
   }
@@ -141,7 +134,11 @@ public class TextViewer
     JPanel holder = new JPanel();
     holder.setLayout(new BorderLayout());
     JScrollPane js = new JScrollPane(m_outText);
-    js.setBorder(BorderFactory.createTitledBorder(Messages.getInstance().getString("TextViewer_SetUpFinal_JScrollPane_BorderFactoryCreateTitledBorder_Text")));
+    js.setBorder(BorderFactory
+      .createTitledBorder(Messages
+        .getInstance()
+        .getString(
+          "TextViewer_SetUpFinal_JScrollPane_BorderFactoryCreateTitledBorder_Text")));
     holder.add(js, BorderLayout.CENTER);
     holder.add(m_history, BorderLayout.WEST);
 
@@ -150,7 +147,7 @@ public class TextViewer
 
   /**
    * Global info for this bean
-   *
+   * 
    * @return a <code>String</code> value
    */
   public String globalInfo() {
@@ -158,9 +155,9 @@ public class TextViewer
   }
 
   private void setUpResultHistory() {
-    java.awt.GraphicsEnvironment ge = 
-      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); 
-    if(!ge.isHeadless()) {
+    java.awt.GraphicsEnvironment ge =
+      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
+    if (!ge.isHeadless()) {
       if (m_outText == null) {
         m_outText = new JTextArea(20, 80);
         m_history = new ResultHistoryPanel(m_outText);
@@ -168,29 +165,36 @@ public class TextViewer
       m_outText.setEditable(false);
       m_outText.setFont(new Font("Monospaced", Font.PLAIN, 12));
       m_outText.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-      m_history.setBorder(BorderFactory.createTitledBorder(Messages.getInstance().getString("TextViewer_SetUpResultHistory_BorderFactoryCreateTitledBorder_Text")));
+      m_history
+        .setBorder(BorderFactory
+          .createTitledBorder(Messages
+            .getInstance()
+            .getString(
+              "TextViewer_SetUpResultHistory_BorderFactoryCreateTitledBorder_Text")));
       m_history.setHandleRightClicks(false);
       m_history.getList().addMouseListener(new MouseAdapter() {
-          public void mouseClicked(MouseEvent e) {
-            if (((e.getModifiers() & InputEvent.BUTTON1_MASK)
-                 != InputEvent.BUTTON1_MASK) || e.isAltDown()) {
-              int index = m_history.getList().locationToIndex(e.getPoint());
-              if (index != -1) {
-                String name = m_history.getNameAtIndex(index);
-                visualize(name, e.getX(), e.getY());
-              } else {
-                visualize(null, e.getX(), e.getY());
-              }
+        @Override
+        public void mouseClicked(MouseEvent e) {
+          if (((e.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK)
+            || e.isAltDown()) {
+            int index = m_history.getList().locationToIndex(e.getPoint());
+            if (index != -1) {
+              String name = m_history.getNameAtIndex(index);
+              visualize(name, e.getX(), e.getY());
+            } else {
+              visualize(null, e.getX(), e.getY());
             }
           }
-        });
+        }
+      });
     }
   }
 
   /**
    * Handles constructing a popup menu with visualization options.
-   * @param name the name of the result history list entry clicked on by
-   * the user
+   * 
+   * @param name the name of the result history list entry clicked on by the
+   *          user
    * @param x the x coordinate for popping up the menu
    * @param y the y coordinate for popping up the menu
    */
@@ -198,53 +202,65 @@ public class TextViewer
     final JPanel panel = this;
     final String selectedName = name;
     JPopupMenu resultListMenu = new JPopupMenu();
-    
-    JMenuItem visMainBuffer = new JMenuItem(Messages.getInstance().getString("TextViewer_Visualize_VisMainBuffer_JMenuItem_Text"));
+
+    JMenuItem visMainBuffer =
+      new JMenuItem(Messages.getInstance().getString(
+        "TextViewer_Visualize_VisMainBuffer_JMenuItem_Text"));
     if (selectedName != null) {
       visMainBuffer.addActionListener(new ActionListener() {
-	  public void actionPerformed(ActionEvent e) {
-	    m_history.setSingle(selectedName);
-	  }
-	});
+        @Override
+        public void actionPerformed(ActionEvent e) {
+          m_history.setSingle(selectedName);
+        }
+      });
     } else {
       visMainBuffer.setEnabled(false);
     }
     resultListMenu.add(visMainBuffer);
-    
-    JMenuItem visSepBuffer = new JMenuItem(Messages.getInstance().getString("TextViewer_Visualize_VisSepBuffer_JMenuItem_Text"));
+
+    JMenuItem visSepBuffer =
+      new JMenuItem(Messages.getInstance().getString(
+        "TextViewer_Visualize_VisSepBuffer_JMenuItem_Text"));
     if (selectedName != null) {
       visSepBuffer.addActionListener(new ActionListener() {
-	public void actionPerformed(ActionEvent e) {
-	  m_history.openFrame(selectedName);
-	}
+        @Override
+        public void actionPerformed(ActionEvent e) {
+          m_history.openFrame(selectedName);
+        }
       });
     } else {
       visSepBuffer.setEnabled(false);
     }
     resultListMenu.add(visSepBuffer);
-    
-    JMenuItem saveOutput = new JMenuItem(Messages.getInstance().getString("TextViewer_Visualize_SaveOutput_JMenuItem_Text"));
+
+    JMenuItem saveOutput =
+      new JMenuItem(Messages.getInstance().getString(
+        "TextViewer_Visualize_SaveOutput_JMenuItem_Text"));
     if (selectedName != null) {
       saveOutput.addActionListener(new ActionListener() {
-	  public void actionPerformed(ActionEvent e) {
-	    SaveBuffer m_SaveOut = new SaveBuffer(null, panel);
-	    StringBuffer sb = m_history.getNamedBuffer(selectedName);
-	    if (sb != null) {
-	      m_SaveOut.save(sb);
-	    }
-	  }
-	});
+        @Override
+        public void actionPerformed(ActionEvent e) {
+          SaveBuffer m_SaveOut = new SaveBuffer(null, panel);
+          StringBuffer sb = m_history.getNamedBuffer(selectedName);
+          if (sb != null) {
+            m_SaveOut.save(sb);
+          }
+        }
+      });
     } else {
       saveOutput.setEnabled(false);
     }
     resultListMenu.add(saveOutput);
-    
-    JMenuItem deleteOutput = new JMenuItem(Messages.getInstance().getString("TextViewer_Visualize_DeleteOutput_JMenuItem_Text"));
+
+    JMenuItem deleteOutput =
+      new JMenuItem(Messages.getInstance().getString(
+        "TextViewer_Visualize_DeleteOutput_JMenuItem_Text"));
     if (selectedName != null) {
       deleteOutput.addActionListener(new ActionListener() {
-	public void actionPerformed(ActionEvent e) {
-	  m_history.removeResult(selectedName);
-	}
+        @Override
+        public void actionPerformed(ActionEvent e) {
+          m_history.removeResult(selectedName);
+        }
       });
     } else {
       deleteOutput.setEnabled(false);
@@ -256,60 +272,59 @@ public class TextViewer
 
   /**
    * Accept a data set for displaying as text
-   *
+   * 
    * @param e a <code>DataSetEvent</code> value
    */
+  @Override
   public synchronized void acceptDataSet(DataSetEvent e) {
-    TextEvent nt = new TextEvent(e.getSource(), 
-				 e.getDataSet().toString(),
-				 e.getDataSet().relationName());
+    TextEvent nt =
+      new TextEvent(e.getSource(), e.getDataSet().toString(), e.getDataSet()
+        .relationName());
     acceptText(nt);
   }
 
   /**
    * Accept a training set for displaying as text
-   *
+   * 
    * @param e a <code>TrainingSetEvent</code> value
    */
+  @Override
   public synchronized void acceptTrainingSet(TrainingSetEvent e) {
-    TextEvent nt = new TextEvent(e.getSource(), 
-				 e.getTrainingSet().toString(),
-				 e.getTrainingSet().relationName());
+    TextEvent nt =
+      new TextEvent(e.getSource(), e.getTrainingSet().toString(), e
+        .getTrainingSet().relationName());
     acceptText(nt);
   }
 
   /**
    * Accept a test set for displaying as text
-   *
+   * 
    * @param e a <code>TestSetEvent</code> value
    */
+  @Override
   public synchronized void acceptTestSet(TestSetEvent e) {
-    TextEvent nt = new TextEvent(e.getSource(), 
-				 e.getTestSet().toString(),
-				 e.getTestSet().relationName());
+    TextEvent nt =
+      new TextEvent(e.getSource(), e.getTestSet().toString(), e.getTestSet()
+        .relationName());
     acceptText(nt);
   }
 
   /**
    * Accept some text
-   *
+   * 
    * @param e a <code>TextEvent</code> value
    */
+  @Override
   public synchronized void acceptText(TextEvent e) {
     if (m_outText == null) {
       setUpResultHistory();
     }
     StringBuffer result = new StringBuffer();
     result.append(e.getText());
-    //    m_resultsString.append(e.getText());
-    //    m_outText.setText(m_resultsString.toString());
-    String name = (new SimpleDateFormat("HH:mm:ss - "))
-      .format(new Date());
+    // m_resultsString.append(e.getText());
+    // m_outText.setText(m_resultsString.toString());
+    String name = (new SimpleDateFormat("HH:mm:ss - ")).format(new Date());
     name += e.getTextTitle();
-    //    System.err.println(name);
-    if (name.length() > 30) {
-      name = name.substring(0, 30);
-    }
 
     if (m_outText != null) {
       // see if there is an entry with this name already in the list -
@@ -317,7 +332,7 @@ public class TextViewer
       int mod = 2;
       String nameOrig = new String(name);
       while (m_history.getNamedBuffer(name) != null) {
-        name = new String(nameOrig+""+mod);
+        name = new String(nameOrig + "" + mod);
         mod++;
       }
       m_history.addResult(name, result);
@@ -330,9 +345,10 @@ public class TextViewer
 
   /**
    * Describe <code>setVisual</code> method here.
-   *
+   * 
    * @param newVisual a <code>BeanVisual</code> value
    */
+  @Override
   public void setVisual(BeanVisual newVisual) {
     m_visual = newVisual;
   }
@@ -340,16 +356,18 @@ public class TextViewer
   /**
    * Get the visual appearance of this bean
    */
+  @Override
   public BeanVisual getVisual() {
     return m_visual;
   }
-  
+
   /**
    * Use the default visual appearance for this bean
    */
+  @Override
   public void useDefaultVisual() {
-    m_visual.loadIcons(BeanVisual.ICON_PATH+"DefaultText.gif",
-		       BeanVisual.ICON_PATH+"DefaultText_animated.gif");
+    m_visual.loadIcons(BeanVisual.ICON_PATH + "DefaultText.gif",
+      BeanVisual.ICON_PATH + "DefaultText_animated.gif");
   }
 
   /**
@@ -358,20 +376,31 @@ public class TextViewer
   public void showResults() {
     if (m_resultsFrame == null) {
       if (m_outText == null) {
-	setUpResultHistory();
+        setUpResultHistory();
       }
-      m_resultsFrame = new JFrame(Messages.getInstance().getString("TextViewer_ShowResults_ResultsFrame_JFrame_Text"));
+      m_resultsFrame =
+        new JFrame(Messages.getInstance().getString(
+          "TextViewer_ShowResults_ResultsFrame_JFrame_Text"));
       m_resultsFrame.getContentPane().setLayout(new BorderLayout());
       final JScrollPane js = new JScrollPane(m_outText);
-      js.setBorder(BorderFactory.createTitledBorder(Messages.getInstance().getString("TextViewer_ShowResults_Js_SetBorder_BorderFactoryCreateTitledBorder_Text")));
-      m_resultsFrame.getContentPane().add(js, BorderLayout.CENTER);
-      m_resultsFrame.getContentPane().add(m_history, BorderLayout.WEST);
+      js.setBorder(BorderFactory
+        .createTitledBorder(Messages
+          .getInstance()
+          .getString(
+            "TextViewer_ShowResults_Js_SetBorder_BorderFactoryCreateTitledBorder_Text")));
+
+      JSplitPane p2 =
+        new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, m_history, js);
+      m_resultsFrame.getContentPane().add(p2, BorderLayout.CENTER);
+      // m_resultsFrame.getContentPane().add(js, BorderLayout.CENTER);
+      // m_resultsFrame.getContentPane().add(m_history, BorderLayout.WEST);
       m_resultsFrame.addWindowListener(new java.awt.event.WindowAdapter() {
-	  public void windowClosing(java.awt.event.WindowEvent e) {
-	    m_resultsFrame.dispose();
-	    m_resultsFrame = null;
-	  }
-	});
+        @Override
+        public void windowClosing(java.awt.event.WindowEvent e) {
+          m_resultsFrame.dispose();
+          m_resultsFrame = null;
+        }
+      });
       m_resultsFrame.pack();
       m_resultsFrame.setVisible(true);
     } else {
@@ -381,9 +410,10 @@ public class TextViewer
 
   /**
    * Get a list of user requests
-   *
+   * 
    * @return an <code>Enumeration</code> value
    */
+  @Override
   public Enumeration enumerateRequests() {
     Vector newVector = new Vector(0);
 
@@ -395,10 +425,11 @@ public class TextViewer
 
   /**
    * Perform the named request
-   *
+   * 
    * @param request a <code>String</code> value
    * @exception IllegalArgumentException if an error occurs
    */
+  @Override
   public void performRequest(String request) {
     if (request.compareTo("Show results") == 0) {
       showResults();
@@ -406,70 +437,73 @@ public class TextViewer
       m_outText.setText("");
       m_history.clearResults();
     } else {
-      throw new 
-	IllegalArgumentException(request
-		    + Messages.getInstance().getString("TextViewer_PerformRequest_IllegalArgumentException_Text"));
+      throw new IllegalArgumentException(request
+        + Messages.getInstance().getString(
+          "TextViewer_PerformRequest_IllegalArgumentException_Text"));
     }
   }
 
   /**
    * Add a property change listener to this bean
-   *
+   * 
    * @param name the name of the property of interest
    * @param pcl a <code>PropertyChangeListener</code> value
    */
-  public void addPropertyChangeListener(String name,
-					PropertyChangeListener pcl) {
+  @Override
+  public void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
     m_bcSupport.addPropertyChangeListener(name, pcl);
   }
 
   /**
    * Remove a property change listener from this bean
-   *
+   * 
    * @param name the name of the property of interest
    * @param pcl a <code>PropertyChangeListener</code> value
    */
+  @Override
   public void removePropertyChangeListener(String name,
-					   PropertyChangeListener pcl) {
+    PropertyChangeListener pcl) {
     m_bcSupport.removePropertyChangeListener(name, pcl);
   }
 
   /**
    * Add a vetoable change listener to this bean
-   *
+   * 
    * @param name the name of the property of interest
    * @param vcl a <code>VetoableChangeListener</code> value
    */
-  public void addVetoableChangeListener(String name,
-				       VetoableChangeListener vcl) {
+  @Override
+  public void addVetoableChangeListener(String name, VetoableChangeListener vcl) {
     m_bcSupport.addVetoableChangeListener(name, vcl);
   }
-  
+
   /**
    * Remove a vetoable change listener from this bean
-   *
+   * 
    * @param name the name of the property of interest
    * @param vcl a <code>VetoableChangeListener</code> value
    */
+  @Override
   public void removeVetoableChangeListener(String name,
-					   VetoableChangeListener vcl) {
+    VetoableChangeListener vcl) {
     m_bcSupport.removeVetoableChangeListener(name, vcl);
   }
 
   /**
    * Set a bean context for this bean
-   *
+   * 
    * @param bc a <code>BeanContext</code> value
    */
+  @Override
   public void setBeanContext(BeanContext bc) {
     m_beanContext = bc;
     m_design = m_beanContext.isDesignTime();
     if (m_design) {
       appearanceDesign();
     } else {
-      java.awt.GraphicsEnvironment ge = 
-        java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); 
-      if (!ge.isHeadless()){
+      java.awt.GraphicsEnvironment ge =
+        java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
+      if (!ge.isHeadless()) {
         appearanceFinal();
       }
     }
@@ -477,26 +511,27 @@ public class TextViewer
 
   /**
    * Notify all text listeners of a text event
-   *
+   * 
    * @param ge a <code>TextEvent</code> value
    */
   private void notifyTextListeners(TextEvent ge) {
     Vector l;
     synchronized (this) {
-      l = (Vector)m_textListeners.clone();
+      l = (Vector) m_textListeners.clone();
     }
     if (l.size() > 0) {
-      for(int i = 0; i < l.size(); i++) {
-	((TextListener)l.elementAt(i)).acceptText(ge);
+      for (int i = 0; i < l.size(); i++) {
+        ((TextListener) l.elementAt(i)).acceptText(ge);
       }
     }
   }
 
   /**
    * Return the bean context (if any) that this bean is embedded in
-   *
+   * 
    * @return a <code>BeanContext</code> value
    */
+  @Override
   public BeanContext getBeanContext() {
     return m_beanContext;
   }
@@ -504,26 +539,28 @@ public class TextViewer
   /**
    * Stop any processing that the bean might be doing.
    */
+  @Override
   public void stop() {
   }
-  
+
   /**
-   * Returns true if. at this time, the bean is busy with some
-   * (i.e. perhaps a worker thread is performing some calculation).
+   * Returns true if. at this time, the bean is busy with some (i.e. perhaps a
+   * worker thread is performing some calculation).
    * 
    * @return true if the bean is busy.
    */
+  @Override
   public boolean isBusy() {
     return false;
   }
 
   /**
    * Set a logger
-   *
+   * 
    * @param logger a <code>Logger</code> value
    */
+  @Override
   public void setLog(Logger logger) {
-    m_log = logger;
   }
 
   /**
@@ -531,6 +568,7 @@ public class TextViewer
    * 
    * @param name the name to use
    */
+  @Override
   public void setCustomName(String name) {
     m_visual.setText(name);
   }
@@ -540,66 +578,69 @@ public class TextViewer
    * 
    * @return the custom name (or the default name)
    */
+  @Override
   public String getCustomName() {
     return m_visual.getText();
   }
 
   /**
-   * Returns true if, at this time, 
-   * the object will accept a connection via the supplied
-   * EventSetDescriptor
-   *
+   * Returns true if, at this time, the object will accept a connection via the
+   * supplied EventSetDescriptor
+   * 
    * @param esd the EventSetDescriptor
    * @return true if the object will accept a connection
    */
+  @Override
   public boolean connectionAllowed(EventSetDescriptor esd) {
     return connectionAllowed(esd.getName());
   }
 
   /**
-   * Returns true if, at this time, 
-   * the object will accept a connection via the named event
-   *
+   * Returns true if, at this time, the object will accept a connection via the
+   * named event
+   * 
    * @param eventName the name of the event
    * @return true if the object will accept a connection
    */
+  @Override
   public boolean connectionAllowed(String eventName) {
     return true;
   }
 
   /**
-   * Notify this object that it has been registered as a listener with
-   * a source for recieving events described by the named event
-   * This object is responsible for recording this fact.
-   *
+   * Notify this object that it has been registered as a listener with a source
+   * for recieving events described by the named event This object is
+   * responsible for recording this fact.
+   * 
    * @param eventName the event
-   * @param source the source with which this object has been registered as
-   * a listener
+   * @param source the source with which this object has been registered as a
+   *          listener
    */
+  @Override
   public void connectionNotification(String eventName, Object source) {
   }
 
   /**
-   * Notify this object that it has been deregistered as a listener with
-   * a source for named event. This object is responsible
-   * for recording this fact.
-   *
+   * Notify this object that it has been deregistered as a listener with a
+   * source for named event. This object is responsible for recording this fact.
+   * 
    * @param eventName the event
-   * @param source the source with which this object has been registered as
-   * a listener
+   * @param source the source with which this object has been registered as a
+   *          listener
    */
+  @Override
   public void disconnectionNotification(String eventName, Object source) {
   }
 
   /**
-   * Returns true, if at the current time, the named event could
-   * be generated. Assumes that the supplied event name is
-   * an event that could be generated by this bean
-   *
+   * Returns true, if at the current time, the named event could be generated.
+   * Assumes that the supplied event name is an event that could be generated by
+   * this bean
+   * 
    * @param eventName the name of the event in question
-   * @return true if the named event could be generated at this point in
-   * time
+   * @return true if the named event could be generated at this point in time
    */
+  @Override
   public boolean eventGeneratable(String eventName) {
     if (eventName.equals("text")) {
       return true;
@@ -609,7 +650,7 @@ public class TextViewer
 
   /**
    * Add a text listener
-   *
+   * 
    * @param cl a <code>TextListener</code> value
    */
   public synchronized void addTextListener(TextListener cl) {
@@ -618,29 +659,32 @@ public class TextViewer
 
   /**
    * Remove a text listener
-   *
+   * 
    * @param cl a <code>TextListener</code> value
    */
   public synchronized void removeTextListener(TextListener cl) {
     m_textListeners.remove(cl);
   }
 
-  public static void main(String [] args) {
+  public static void main(String[] args) {
     try {
       final javax.swing.JFrame jf = new javax.swing.JFrame();
       jf.getContentPane().setLayout(new java.awt.BorderLayout());
 
       final TextViewer tv = new TextViewer();
 
-      tv.acceptText(new TextEvent(tv, Messages.getInstance().getString("TextViewer_Main_TextEvent_Text_First"), Messages.getInstance().getString("TextViewer_Main_TextEvent_Text_Second")));
+      tv.acceptText(new TextEvent(tv, Messages.getInstance().getString(
+        "TextViewer_Main_TextEvent_Text_First"), Messages.getInstance()
+        .getString("TextViewer_Main_TextEvent_Text_Second")));
       jf.getContentPane().add(tv, java.awt.BorderLayout.CENTER);
       jf.addWindowListener(new java.awt.event.WindowAdapter() {
+        @Override
         public void windowClosing(java.awt.event.WindowEvent e) {
           jf.dispose();
           System.exit(0);
         }
       });
-      jf.setSize(800,600);
+      jf.setSize(800, 600);
       jf.setVisible(true);
     } catch (Exception ex) {
       ex.printStackTrace();
diff --git a/src/main/java/weka/gui/beans/messages/messages_ar.properties b/src/main/java/weka/gui/beans/messages/messages_ar.properties
new file mode 100644
index 0000000..835f9cc
--- /dev/null
+++ b/src/main/java/weka/gui/beans/messages/messages_ar.properties
@@ -0,0 +1,739 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+CostBenefitAnalysis_AnalysisPanel_ConstructCostBenefitData_CostBenefitI_Instances_Text=\u0645\u0646\u062D\u0646\u0649 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629 
+Filter_AcceptInstance_Mess_Text_First=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+StripChart_RefreshFreqTipText_Text=\u062A\u062E\u0637\u064A\u0637 \u0643\u0644 \u0646\u0642\u0637\u0629 \u0628\u064A\u0627\u0646\u0627\u062A Xth  
+Classifier_SetClassifierTemplate_LogMessage_Text_Third=\u0644\u064A\u0633 \u0645\u0635\u0646\u0641 \u062A\u0635\u0627\u0639\u062F\u064A
+KnowledgeFlowApp_DoPopup_Actions_Text=\u0627\u0644\u0625\u062C\u0631\u0627\u0621\u0627\u062A\:
+KnowledgeFlowApp_SaveB_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+Filter_AcceptTestSet_StatusMessage_Text_Second=")"
+LogPanel_ColumnNames_Text_Index3=\u0627\u0644\u062D\u0627\u0644\u0629
+LogPanel_ColumnNames_Text_Index2=\u0648\u0642\u062A
+LogPanel_ColumnNames_Text_Index1=\u0627\u0644\u0645\u0639\u0637\u064A\u0627\u062A
+LogPanel_ColumnNames_Text_Index0=\u0627\u0644\u0645\u0643\u0648\u0646
+PredictionAppender_GlobalInfo_Text=\u064A\u0642\u0628\u0644 \u062F\u0641\u0639\u0627\u062A \u0623\u0648 \u0627\u062D\u062F\u0627\u062B \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u0625\u0636\u0627\u0641\u064A\u0629 \u0648\u064A\u0646\u062A\u062C \u0645\u062C\u0645\u0648\u0639\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u062C\u062F\u064A\u062F\u0629 \u0645\u0639\u0625\u0636\u0627\u0641\u0629  \u062A\u0646\u0628\u0624\u0627\u062A \u0627\u0644\u0645\u0635\u0646\u0641 .
+FlowRunner_Run_Text_Nineth=\u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0644\u064A.
+DataVisualizer_SetInstances_Exception_Text=\u0644\u0627 \u064A\u0646\u0628\u063A\u064A \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0623\u062B\u0646\u0627\u0621 \u0648\u0642\u062A \u0627\u0644\u062A\u0635\u0645\u064A\u0645. \u0648\u0645\u0646 \u0627\u0644\u0645\u0641\u062A\u0631\u0636 \u0623\u0646 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A \u062D\u0627\u0644\u0629 \u0627\u0633\u062A\ [...]
+CostBenefitAnalysis_Conf_ActualA_JLabel_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u0629 (a)\: 
+Saver_AcceptTestSet_Text_Third=\u0644\u0644\u0639\u0644\u0627\u0642\u0629 
+KnowledgeFlowApp_LoadProperties_Exception_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0648\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A ...
+KnowledgeFlowApp_MouseClicked_LogPanel_LogMessage_Text_Second=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0648\u064A\u0643\u0627
+IncrementalClassifierEvaluator_AcceptClassifier_StatusMessage_Text_Fourth=\u062A\u0645
+CostBenefitAnalysis_Conf_PredictedB_JLabel_Text=\u0645\u062A\u0648\u0642\u0639 (\u0628)
+Classifier_AcceptTestSet_LogMessage_Text_Second=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+ClassifierPerformanceEvaluator_AcceptClassifier_Visual_SetText_Text_First=\u062A\u0642\u064A\u064A\u0645 (
+FlowRunner_Run_LogMessage_Text_Eighth=\u0625\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644  (\u0645\u0648\u0642\u0639 
+KnowledgeFlowApp_CheckSubFlow_Result_Name_ShowConfirmDialog_Text_First=\u0623\u062F\u062E\u0644 \u0627\u0633\u0645\u0627 \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629
+KnowledgeFlowApp_MakeHolderPanelForToolBarBean_Error_Text=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0636\u0627\u0641\u0629 bean  \u0625\u0644\u0649 \u0645\u062E\u0637\u0637 \u062A\u062F\u0641\u0642 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+Clusterer_AcceptTrainingSet_ModelString_Text_Third=\u0623\u0636\u0639\u0627\u0641 \u0627\u0644\u062A\u062F\u0631\u064A\u0628\: 
+Classifier_SetClassifierTemplate_LogMessage_Text_Second=\u062A\u062D\u0630\u064A\u0631 \: 
+CostBenefitAnalysis_Conf_ActualB_JLabel_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u0629 (b)\:  
+Classifier_AcceptTestSet_StatusMessage_Text_Second=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+Filter_AcceptInstance_StatusMessage_Text_Seventh=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+Filter_AcceptInstance_StatusMessage_Text_Fifth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+KnowledgeFlow_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+TestSetMaker_NotifyTestSetProduced_LogMessage_Text_Second=\u0625\u064A\u0642\u0627\u0641.
+SaverCustomizer_SetUpDatabase_UserNameLab_JLabel_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\:    
+LoaderCustomizer_SetUpDatabase_DbaseURLLab_JLabel_Text=\u0631\u0627\u0628\u0637 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\: 
+ClustererPerformanceEvaluator_AcceptClusterer_LogMessage_Text_First=[\u0645\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u062C\u0645\u0639] 
+KnowledgeFlowApp_Main_Error_Text_First=\n [ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 ]  \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629  \:
+Filter_ProcessTrainingOrDataSourceEvents_LogMessage_Text_First=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Clusterer_AcceptTrainingSet_LogMessage_Text_Second=\u062A\u0648\u0642\u0641 \u0628\u0646\u0627\u0621 \u0627\u0644\u0645\u062C\u0645\u0639 \!
+SerializedModelSaverCustomizer_FileChooser_SetApproveButtonText_Text=\u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0633\u0627\u0631 \u0648 \u0627\u0644\u0628\u0627\u062F\u0626\u0629
+Classifier_ConnectionNotification_LogMessage_Text_Third=\u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u0645\u062D\u0645\u0644\:
+Clusterer_AcceptTrainingSet_StatusMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+ClassifierPerformanceEvaluator_AcceptClassifier_HtmlTitle_Text_Third=)</font></html> 
+Saver_AcceptDataSet_Text_First=...\u0627\u0644\u0639\u0644\u0627\u0642\u0629   
+SerializedModelSaver_AcceptClassifier_StatusMessage_Text_Second=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_HandleIncrementalEvent_LogMessage_Text_Seventh=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+ClassValuePicker_AssignClassValue_LogMessage_Text_Fifth=[\u0645\u062E\u062A\u0627\u0631 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629]   
+TextViewer_Main_TextEvent_Text_Second=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
+Classifier_TrainingTask_Execute_LogMessage_Text_Seventh=) \u062A\u0645 \u0627\u0644\u0642\u0637\u0639\!
+Filter_PerformRequest_Text=\u062A\u0648\u0642\u0641
+Classifier_AcceptTestSet_Msg_Text_Third=\u0623\u0636\u0639\u0627\u0641 
+FilterCustomizer_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+ClustererPerformanceEvaluator_AcceptClusterer_StatusMessage_Text_Second=) ...
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeSTRING_Text=(Str) 
+Classifier_HandleIncrementalEvent_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+KnowledgeFlowApp_KOMLFilter_Text_Third=kf)
+TrainingSetMaker_AcceptDataSet_Error_Text=\u0627\u0633\u062A\u0639\u0631\u0636 \u0641\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+Saver_AcceptTestSet_LogMessage_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0646\u0633\u062E \u0627\u0644\u0645\u062E\u0632\u0651\u0646
+Saver_AcceptTrainingSet_Text_First=... \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+Classifier_AcceptTrainingSet_Msg_Text_Fifth=\u0625\u0639\u062F\u0627\u062F \u0642\u0648\u0627\u0626\u0645 \u0627\u0644\u0646\u062A\u0627\u0626\u062C.
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Second=\u062A\u0645 \u0627\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u0642\u0633\u064A\u064A\u0645\u0651
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeRELATIONAL_Text=(Rel) 
+Classifier_ConnectionNotification_StatusMessage_Text_Second=\u062E\u0637\u0623 \: \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C (\u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644)
+TestSetMaker_GlobalInfo_Text=\u062A\u0639\u064A\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0627\u0631\u062F\u0629 \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 .
+KnowledgeFlowApp_MouseClicked_LogPanel_StatusMessage_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u0645\u0631\u062D\u0628\u0627 \u0628\u0643\u0645 \u0641\u064A \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0648\u064A\u0643\u0627
+FlowRunner_Run_Text_First=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642 
+FlowRunner_Run_LogMessage_Text_Sixth=\u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0644\u064A.
+ClassifierPerformanceEvaluator_AcceptClassifier_LogMessage_Text_Fourth=] \u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u0642\u064A\u064A\u0645\! 
+ClassAssigner_GlobalInfo_Text=\u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0630\u064A \u064A \u064A\u0645\u0643\u0646 \u0627\u0639\u062A\u0628\u0627\u0631\u0647 \u0627\u0644\u0641\u0626\u0629  \u0641\u064A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0627\u0631\u062F\u0629.
+Filter_AcceptInstance_StatusMessage_Text_Eleventh=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+FlowRunner_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+KnowledgeFlowApp_DoPopup_UngroupItem_MenuItem_Text=\u0641\u0643 \u0627\u0644\u062A\u062C\u0645\u064A\u0639
+Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0635\u0646\u0641.
+Classifier_ConnectionNotification_LogMessage_Text_Fourth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Associator_AcceptDataSet_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0631\u0627\u0628\u0637
+KnowledgeFlowApp_LoadLayout_StatusMessage_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u0645 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642
+Classifier_AcceptTrainingSet_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+FilterCustomizer_OKBut_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0641\u0634\u0644 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062D\u0627\u0644\u0629 \:
+KnowledgeFlowApp_MakeHolderPanelForToolBarBean_TempButton_SetToolTipText_Text=\u0627\u0633\u062A\u0645\u0631 \u0628\u0627\u0644\u0636\u063A\u0637 \u0639\u0644\u0649 \u0645\u0641\u062A\u0627\u062D Shift \u0648\u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0632\u0627\u0644\u0629 
+Filter_AcceptTestSet_StatusMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+Classifier_XStreamFilter_ExtensionFileFilter_Text_First=\ \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644 XML  (*
+KnowledgeFlowApp_LoadProperties_Exception_Text_Third=" \u0648 \u064A\u062C\u0628 \u0648\u0636\u0639\u0647\u0627 \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0631\u0626\u064A\u0633\u064A (\u0627\u0644\u0630\u064A \u0647\u0648 "
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_JLabel_Text_First=% \u0645\u0646 \u0627\u0644\u0633\u0643\u0627\u0646\: 
+Filter_AcceptInstance_LogMessage_Text_First=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Classifier_TrainingTask_Execute_TitleString_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C\: 
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_First=\u062A\u0635\u0641\u064A\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 (
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Seventh=KnowledgeFlowApp.setUpToolBars()
+KnowledgeFlowApp_Init_Exception_JOptionPaneShowMessageDialog_Text_Second=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+KnowledgeFlowApp_LoadB_SetToolTipText_Text=\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+Clusterer_LoadModel_JOptionPane_ShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+KnowledgeFlowApp_MouseClicked_LogPanel_LogMessage_Text_Fourth=\u0648\u064A\u0628\: 
+LoaderCustomizer_Error_Text_First=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u062E\u0627\u0635\u064A\u0629\!
+Classifier_TrainingTask_Execute_TitleString_Text_Second=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+IncrementalClassifierEvaluator_AcceptClassifier_StatusMessage_Text_First=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0632\u0627\u064A\u062F\u064A\: \u0628\u062F\u0621 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629
+FlowRunner_LoadXML_Error_Text=+ + + + + + + + + + + + \u0645\u062A\u063A\u064A\u0631\u0627\u062A \u0627\u0644\u0628\u064A\u0626\u0629 \u0641\u0627\u0631\u063A\u0629\! ...
+LogPanel_Main_StatusMessage_Eighth=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u0639\u0648\u062F\u0629 \u0625\u0644\u0649 \u0648\u0636\u0639\u0647\u0627 \u0627\u0644\u0637\u0628\u064A\u0639\u064A.
+ClassifierPerformanceEvaluator_AcceptClassifier_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641
+ClustererPerformanceEvaluator_AcceptClusterer_LogMessage_Text_Third=[ 
+Filter_AcceptTestSet_LogMessage_Text_First=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Filter_ProcessTrainingOrDataSourceEvents_LogMessage_Text_Third=\u062A\u0645 \u0642\u0637\u0639 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628\!
+Clusterer_AcceptTrainingSet_StatusMessage_Text_Second=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+Filter_AcceptInstance_StatusMessage_Text_Second=\u062E\u0637\u0623\: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u062A\u062F\u0641\u0642\u0629. \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631.
+ClustererPerformanceEvaluator_AcceptClusterer_Test_Text_First=\u0627\u062E\u062A\u0628\u0627\u0631
+CostBenefitAnalysis_PpercPop_JRadioButton_Text=$ \u0645\u0646 \u0627\u0644\u0633\u0643\u0627\u0646
+Saver_AcceptDataSet_Text_Third=...\u0627\u0644\u0639\u0644\u0627\u0642\u0629   
+ClustererPerformanceEvaluator_AcceptClusterer_ResultT_Text_Fifth=\n\n\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0642\u064A\u0645 \u0641\u0626\u0629. \u064A\u062C\u0628 \u0627\u0646 \u062A\u0643\u0648\u0646 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0625\u0633\u0645\u064A\u0629.
+TextViewer_ShowResults_ResultsFrame_JFrame_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0646\u0635
+CostBenefitAnalysis_CostBenefitL_JLabel_Text=\u0627\u0644\u062A\u0643\u0644\u0641\u0629\: 
+ClassAssigner_AcceptInstance_Error_Text=\u0625\u0639\u0644\u0627\u0645 \u0627\u0644\u0645\u062E\u0635\u0635...
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Second=] \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u0631\u0636\u064A\u0629
+CostBenefitAnalysis_AcceptDataSet_Error_Text=[\u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 \u0648 \u0627\u0644\u0645\u0646\u0641\u0639\u0629] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u0645\u062B\u064A\u0644.
+Classifier_AcceptTrainingSet_Msg_Text_Eighth=\u0623\u0636\u0639\u0627\u0641 
+ClassValuePicker_AssignClassValue_StatusMessage_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u0644\u0627 \u064A\u0648\u062C\u062F \u0633\u0645\u0629 \u0641\u0626\u0629 \u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A.
+Classifier_HandleIncrementalEvent_LogMessage_Text_Fifth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+KnowledgeFlowApp_SetUpUserToolBar_AddTab_Text_Second=\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0645\u0646\u0634\u0626\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+Clusterer_AcceptTrainingSet_LogMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631.
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Sixth_Alpha=] \u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+Saver_AcceptTrainingSet_Text_Third=\u0644\u0644\u0639\u0644\u0627\u0642\u0629 
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Fifth=\u0627\u0644\u0623\u0636\u0639\u0627\u0641\: 
+CostBenefitAnalysis_CostR_JRadioButton_Text=\u0627\u0644\u062A\u0643\u0644\u0641\u0629
+Associator_AcceptDataSet_LogMessage_Text_First=[\u0627\u0644\u0631\u0627\u0628\u0637]   
+TrainingSetMaker_NotifyTrainingSetProduced_LogMessage_Text_First=[\u0645\u0643\u0648\u0646 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628]
+SerializedModelSaver_AcceptClassifier_StatusMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+FlowRunner_Run_Text_Third=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u062D\u0630\u064A\u0631 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0628\u062F\u0621 
+AssociatorCustomizer_OKBut_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+Loader_LoadThread_StatusMessage_Text_Second=[\u0627\u0644\u0645\u062D\u0645\u0644] 
+Saver_SaveBatchThread_Run_LogMessage_Text_Fifth=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+ClustererPerformanceEvaluator_AcceptClusterer_StatusMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644 
+PredictionAppender_AcceptClusterer_Error_Text_First=\u0641\u0642\u0637 \u0627\u0644\u0645\u062C\u0645\u0639 \u0627\u0644\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0627\u0644\u0643\u062B\u0627\u0641\u0629 \u064A\u0645\u0643\u0646\u0647 \u0627\u0636\u0627\u0641\u0629 \u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A. \u0628\u062F\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643 \u0633\u064A\u0642\u0648\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 \u0628\u0625\u0639\u0637\u0627\u0621 \u0642\u064 [...]
+KnowledgeFlowApp_DoPopup_Connection_MenuItem_Text=\u0627\u0644\u0627\u062A\u0635\u0627\u0644\u0627\u062A\:
+SaverCustomizer_SetUpFile_PrefixLab_SetText_Text_Second=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+SaverCustomizer_SetUpDatabase_ButtonsP_Cancel_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+Classifier_AcceptTrainingSet_LogMessage_Text_Third=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0627\u0644\u0645\u0635\u0646\u0641)
+TextViewer_SetUpResultHistory_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u064A\u062C\u0629
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Third=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 class \u062A\u062F\u0639\u0649\: 
+KnowledgeFlowApp_CheckSubFlow_Result_JOptionPane_ShowConfirmDialog_Text_First=\u0647\u0644 \u062A\u0631\u064A\u062F \u062A\u062C\u0645\u064A\u0639 \u0647\u0630\u0627 \u0627\u0644\u062A\u062F\u0641\u0642 \u0627\u0644\u0641\u0631\u0639\u064A\u061F
+ClustererCustomizer_OKBut_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+StripChart_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0632\u0627\u064A\u062F\u064A \u0628\u0634\u0643\u0644 \u0646\u0642\u0627\u0637 \u0639\u0631\u0636.
+SerializedModelSaver_SaveModel_StatusMessage_Text=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_JLabel_Text_Third=\u0639\u062A\u0628\u0629 \u0627\u0644\u0646\u062A\u064A\u062C\u0629\:
+TrainTestSplitMaker_GlobalInfo_Text=\u062A\u0642\u0633\u064A\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0627\u0631\u062F\u0629 \u0625\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0645\u0646\u0641\u0635\u0644\u0629 \u0645\u0646 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631.
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Nineth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+Classifier_TrainingTask_Execute_TitleString_Text_Third=\u062A\u0634\u063A\u064A\u0644   
+Filter_AcceptInstance_LogMessage_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0645\u0639\u0627\u0644\u062C\u0629 \u062A\u062F\u0641\u0642 \u0627\u0644\u062D\u0627\u0644\u0627\u062A ; \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+Associator_AcceptDataSet_LogMessage_Text_Fourth=\u062A\u0648\u0642\u0641 \u0628\u0646\u0627\u0621 \u0627\u0644\u0645\u062A\u0631\u0627\u0628\u0637 \!
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_Fifth=[\u0645\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0635\u0627\u0639\u062F\u064A]
+FlowRunner_Run_LogMessage_Text_Second=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u0625\u0637\u0644\u0627\u0642 \u062A\u062F\u0641\u0642 \u0646\u0642\u0627\u0637 \u0627\u0644\u0627\u0646\u0637\u0644\u0627\u0642 \u0628\u0627\u0644\u062A\u062A\u0627\u0628\u0639 ...
+Classifier_HandleIncrementalEvent_ErrorMessage_Text_First=\u062E\u0637\u0623\: \u0644\u0627 \u064A\u0648\u062C\u062F \u0633\u0645\u0629 \u0644\u0644\u0641\u0626\u0629 \u0645\u0646 \u0627\u0644\u062A\u062F\u0641\u0642 \u0627\u0644\u0648\u0627\u0631\u062F\!
+ClustererPerformanceEvaluator_AcceptClusterer_Test_Text_Second=\u062A\u062F\u0631\u064A\u0628
+Loader_LoadThread_StatusMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+Saver_AcceptInstance_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+FlowRunner_Run_LogMessage_Text_First=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u0625\u0637\u0644\u0627\u0642 \u062A\u062F\u0641\u0642 \u0646\u0642\u0627\u0637 \u0627\u0644\u0627\u0646\u0637\u0644\u0627\u0642 \u0628\u0627\u0644\u062A\u062A\u0627\u0628\u0639 ...
+Classifier_TrainingTask_Execute_ErrorMessage_Text_First=\u062E\u0637\u0623\: \u0644\u0627 \u064A\u0648\u062C\u062F \u0633\u0645\u0629 \u0644\u0644\u0641\u0626\u0629  \u0641\u064A \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\!
+IncrementalClassifierEvaluator_AcceptClassifier_StatusMessage_Text_Third=\u0627\u0644\u062D\u0627\u0644\u0627\u062A.
+KnowledgeFlowApp_LoadProperties_Text_Second=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0623\u062F\u0627\u0629 \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \: \u0627\u0644\u0625\u0636\u0627\u0641\u0629 
+KnowledgeFlowApp_MouseClicked_LogPanel_LogMessage_Text_First=\u062A\u0645 \u0643\u062A\u0627\u0628\u0629 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0648\u064A\u0643\u0627 \u0645\u0646 \u0642\u0628\u0644 \u0645\u0627\u0631\u0643 \u0647\u0648\u0644
+FlowRunner_Run_Text_Eighth=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u062D\u0630\u064A\u0631 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0628\u062F\u0621 
+Clusterer_AcceptTrainingSet_LogMessage_Text_First=[\u0627\u0644\u0645\u062C\u0645\u0639]  
+Filter_AcceptTestSet_LogMessage_Text_Third=\u062A\u0645 \u0642\u0637\u0639 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628\!
+IncrementalClassifierEvaluator_AcceptClassifier_Error_Text=\u062F\u0641\u0639\u0629 \u062C\u062F\u064A\u062F\u0629
+KnowledgeFlowApp_Init_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+Saver_AcceptDataSet_LogMessage_Text_Fourth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0646\u0633\u062E \u0627\u0644\u0645\u062E\u0632\u0651\u0646
+Clusterer_SaveModel_LogMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631.
+SerializedModelSaverCustomizer_SetUpFile_PrefixLab_JLabel_Text=\u0628\u0627\u062F\u0626\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:
+Classifier_TrainingTask_Execute_TitleString_Text_Fourth=\u0623\u0636\u0639\u0627\u0641 
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Fifth=[
+KnowledgeFlowApp_KOMLFilter_Text_Second=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 XML (*
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Eighth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+Saver_SaveBatchThread_Run_StatusMessage_Text_Second=...
+ClassValuePicker_AssignClassValue_StatusMessage_Text_Third=\u0625\u0632\u0627\u0644\u0629 
+SaverCustomizer_SetUpDatabase_TableLab_JLabel_Text=\u0627\u0633\u0645 \u0627\u0644\u062C\u062F\u0648\u0644\:
+Clusterer_AcceptTrainingSet_StatusMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Filter_AcceptInstance_StatusMessage_Text_Fourth=\u0627\u0646\u062A\u0647\u0649 \u0627\u0644\u062A\u062F\u0641\u0642.
+TextViewer_GlobalInfo_Text=\u0639\u0631\u0636 \u0646\u0635 \u0627\u0644\u0627\u063A\u0631\u0627\u0636 \u0627\u0644\u0639\u0627\u0645\u0629.
+Associator_AcceptDataSet_LogMessage_Text_Third=[\u0627\u0644\u0631\u0627\u0628\u0637]   
+TrainingSetMaker_NotifyTrainingSetProduced_LogMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+ClassAssigner_NotifyDataListeners_Error_Text=\u0625\u0639\u0644\u0627\u0645 \u0645\u0633\u062A\u0645\u0639\u064A\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ( \u0645\u0639\u064A\u0646 \u0627\u0644\u0641\u0626\u0629 )
+KnowledgeFlowApp_Init_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u0647\u064A\u0626\u0629 KF...
+SaverCustomizer_SetUpDatabase_PasswordLab_JLabel_Text=\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\:    
+ClassifierPerformanceEvaluator_AcceptClassifier_Visual_SetText_Text_Second=) ...
+Classifier_SaveModel_LogMessage_Text_Second=\u062A\u0645 \u062D\u0641\u0638 \u0627\u0644\u0645\u0635\u0646\u0641  
+ClassifierPerformanceEvaluator_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0645\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641)
+Classifier_KOMLFilter_ExtensionFileFilter_Text_First=\ \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644 XML  (*
+Classifier_HandleIncrementalEvent_Error_Text_First=[
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Fourth=] \u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A\!
+Clusterer_LoadModel_LogMessage_Text_Second=[\u0627\u0644\u0645\u062C\u0645\u0639] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0635\u0646\u0641.     
+Saver_AcceptInstance_Error_Text_First=\u062D\u0627\u0644\u0629
+KnowledgeFlowApp_SetUpUserToolBar_AddTab_Text_Fourth=\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u0645\u0633\u0627\u0639\u062F
+ClassAssignerCustomizer_CustomizerClosing_Error_Text=\u0645\u062E\u0635\u0635 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 \u0645\u0639 \u0645\u0639\u064A\u0646 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+FlowRunner_GetRevision_Text=$ \u0645\u0631\u0627\u062C\u0639\u0629\: 7059 $
+AssociatorCustomizer_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+KnowledgeFlowApp_MouseClicked_LogPanel_StatusMessage_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0630\u0627\u0643\u0631\u0629 (\u0645\u062C\u0627\u0646\u064A\u0629 / \u0627\u0644\u0643\u0644 /\u0623\u0643\u0628\u0631 \u062D\u062F.) \u0628\u0627\u0644\u0628\u0627\u064A\u062A\:
+LoaderCustomizer_SetUpDatabase_RelativeFilePath_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0633\u0627\u0631\u0627\u062A \u0645\u0644\u0641 \u0646\u0633\u0628\u064A\u0629
+InstanceStreamToBatchMaker_AcceptInstance_LogMessage_Text_First=[InstanceStreamToBatch] \u062A\u0645\u0631\u064A\u0631 \u0627\u0644\u0647\u064A\u0643\u0644.
+ScatterPlotMatrix_SetInstances_Exception_Text=\u0644\u0627 \u064A\u0646\u0628\u063A\u064A \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0623\u062B\u0646\u0627\u0621 \u0648\u0642\u062A \u0627\u0644\u062A\u0635\u0645\u064A\u0645. \u0648\u0645\u0646 \u0627\u0644\u0645\u0641\u062A\u0631\u0636 \u0623\u0646 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A \u062D\u0627\u0644\u0629 \u0627\u0633\u06 [...]
+Loader_LoadThread_StatusMessage_Text_Fourth=[\u0627\u0644\u0645\u062D\u0645\u0644] 
+ScatterPlotMatrix_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0623\u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0641\u064A \u062A\u0645\u062B\u064A\u0644 \u0645\u0635\u0641\u0648\u0641\u0629 \u0645\u0628\u0639\u062B\u0631\u0629
+Loader_LoadThread_Msg_Text_Second=\u062A\u062D\u0645\u064A\u0644 ...
+StripChart_Main_Jf_JFrame_Text=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0648\u064A\u0643\u0627\: StipChart
+Saver_AcceptDataSet_LogMessage_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0646\u0633\u062E \u0627\u0644\u0645\u062E\u0632\u0651\u0646
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_TempHolderCA_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u063A\u0645\u0648\u0636
+IncrementalClassifierEvaluator_GlobalInfo_Text=\u062A\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641\u064A\u0646 \u0627\u0644\u0645\u062A\u062F\u0631\u064A\u0628\u064A\u0646 \u0628\u0634\u0643\u0644 \u062A\u062F\u0631\u064A\u062C\u064A.
+FlowRunner_Main_Error_Text=Usage\:\n\nFlowRunner <serialized kf file> [-s]\n\n"\tUse -s to launch start points sequentially (default launches in parallel).
+Classifier_TrainingTask_Execute_Error_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Classifier_TrainingTask_Execute_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_TrainingTask_Execute_LogMessage_Text_Fifth=( run  
+Classifier_AcceptTestSet_Msg_Text_Eighth=\u0623\u062E\u0631 \u0645\u0635\u0646\u0641 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u062D\u0638\u0631..  
+AttributeSummarizer_PerformRequest_Jf_JFrame_Text=\u062A\u0645\u062B\u064A\u0644
+FlowRunner_Run_LogMessage_Text_Third=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642 
+Classifier_AcceptTestSet_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+SerializedModelSaver_AcceptClassifier_Message_Text_Sixth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+Classifier_ConnectionNotification_Msg_Text_Second=\u0645\u0635\u0646\u0641 \u063A\u064A\u0631 \u0645\u0639\u062F\u0644. \u0647\u0630\u0627 \u0627\u0644\u0645\u0635\u0646\u0641 \u064A\u0642\u0648\u0645 \u0628\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0648 \u0644\u0627 \u064A\u062A\u0645 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0644\u064A\u0647\u0645.
+ScatterPlotMatrix_PerformRequest_IllegalArgumentException_Text=\u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (ScatterPlotMatrix)
+SerializedModelSaver_FileFormatsAvailable_Text_Fifth=\ \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644 XML  (*
+KnowledgeFlowApp_CheckSubFlow_Result_JOptionPane_ShowConfirmDialog_Text_Second=\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629
+Classifier_TrainingTask_Execute_StatusMessage_Text_Second=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+KnowledgeFlowApp_MouseClicked_LogPanel_LogMessage_Text_Third=(\u062C) - 2002
+KnowledgeFlowApp_P1_JPanel_BorderFactoryCreateTitledBorder_Text=\u062A\u062E\u0637\u064A\u0637 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+BeanConnection_GetSourceEventSetDescriptor_Error_Text_Second=[BeanConnection] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0627\u0633\u062A\u0631\u062C\u0627\u0639 \u0648\u0627\u0635\u0641 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062D\u062F\u062B
+DataVisualizer_PerformRequest_Jf_JFrame_Text=\u062A\u0645\u062B\u064A\u0644
+Clusterer_AcceptTrainingSet_LogMessage_Text_Third=[\u0627\u0644\u0645\u062C\u0645\u0639]  
+ModelPerformanceChart_Main_Error_Text=Usage\: ModelPerformanceChart <dataset>
+TextViewer_Visualize_SaveOutput_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0645\u062E\u0632\u0646\u0629 
+Classifier_TrainingTask_Execute_ModelString_Text_First=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0635\u0646\u064A\u0641 \=\=\=\n\n \u0627\u0644\u0645\u062E\u0637\u0637\:   
+Filter_AcceptInstance_LogMessage_Text_Eighth=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+SerializedModelSaver_AcceptClassifier_Message_Text_Seventh=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+LogPanel_Main_StatusMessage_Second=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u0629\: \u0644\u0627 \u062E\u064A\u0627\u0631\u0627\u062A
+FlowRunner_Run_LogMessage_Text_Fourth=...
+Classifier_AcceptTestSet_Msg_Text_Seventh=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+CostBenefitAnalysis_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u062A\u0643\u0627\u0644\u064A\u0641 \u0648 \u0627\u0644\u0645\u0646\u0641\u0639\u0629)
+Saver_AcceptTrainingSet_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_AcceptTestSet_ErrorMessage_Text_First=\u062E\u0637\u0623\: \u0644\u0627 \u064A\u0648\u062C\u062F \u0633\u0645\u0629 \u0644\u0644\u0641\u0626\u0629  \u0641\u064A \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\!
+CrossValidationFoldMaker_GlobalInfo_Text=\u062A\u0642\u0633\u064A\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0625\u0644\u0649 \u0623\u0636\u0639\u0627\u0641 \u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A. \u062A\u0645 \u062A\u0643\u0648\u064A\u0646 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0644\u062C\u064 [...]
+KnowledgeFlowApp_ClearLayout_StatusMessage_Text=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u0645\u0631\u062D\u0628\u0627 \u0628\u0643\u0645 \u0641\u064A \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0648\u064A\u0643\u0627
+FlowRunner_Load_Exception_Text=\u064A\u0645\u0643\u0646 \u062A\u062D\u0645\u064A\u0644 \u0648\u062A\u0634\u063A\u064A\u0644 \u0641\u0642\u0637 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A \u0623\u0648  \u062A\u062F\u0641\u0642 \u0645\u0639\u0631\u0641\u0629 XML \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644 ( KF * | * kfml )
+Saver_SaveBatchThread_Run_StatusMessage_Text_First=\u064A\u062A\u0645 \u0627\u0644\u062D\u0641\u0638
+IncrementalClassifierEvaluatorCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0632\u0627\u064A\u062F\u064A
+Associator_PerformRequest_IllegalArgumentException_Text_First=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0627\u0644\u0631\u0627\u0628\u0637)
+Classifier_AcceptTrainingSet_Msg_Text_Second=\u062A\u0634\u063A\u064A\u0644 \u062A\u062C\u0645\u0639 \u0627\u0644\u0645\u0646\u0641\u0630 ( 
+DataVisualizer_PerformRequest_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u064A\u0631 (\u0645\u0635\u0648\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A)
+KnowledgeFlowApp_InstallWindowListenerForSavingUserBeans_Text=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062D\u0641\u0638 \u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 ....
+Classifier_SaveModel_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Classifier_SaveModel_StatusMessage_Text_First=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C .
+Filter_AcceptInstance_Mess_Text_Second=\u064A\u0642\u0648\u0645 \u062D\u0627\u0644\u064A\u0627 \u0628\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u0623\u062C\u0632\u0627\u0621
+Saver_SaveBatchThread_Run_StatusMessage_Text_Fourth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+FlowRunner_Run_LogMessage_Text_Tenth=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u062D\u0630\u064A\u0631 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0628\u062F\u0621 
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_ThreshHolder_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0627\u0644\u062D\u062F
+Loader_AppearanceFinal_GoButton_JButton_Text=\u0628\u062F\u0621 ...
+ClassifierPerformanceEvaluator_AcceptClassifier_ResultT_Text_Fourth=
+CostBenefitAnalysis_MaximizeCB_JButton_Text=\u062A\u062D\u0642\u064A\u0642 \u0623\u0642\u0635\u0649 \u0642\u062F\u0631 \u0645\u0646 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629
+GraphViewer_EnumerateRequests_Text=\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C
+ModelPerformanceChart_AppearanceDesign_Visual_BeanVisual_Text=\u0645\u062E\u0637\u0637 \u0623\u062F\u0627\u0621 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Fifth=\u062F\u0642\u0629
+SerializedModelSaver_AcceptClassifier_Message_Text_Eighth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+GraphViewer_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0623\u0648 \u0627\u0644\u0634\u062C\u0631\u0629  \u0627\u0644\u0645\u0646\u062A\u062C\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0635\u0646\u0641 \u0623\u0648 \u0627\u0644\u0645\u062C\u0645\u0639.
+Classifier_SaveModel_LogMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0645\u0635\u0646\u0641.
+SerializedModelSaver_SaveModel_LogMessage_Text_First=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+Clusterer_SaveModel_JOptionPane_ShowMessageDialog_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+LoaderCustomizer_SetUpDatabase_UserNameLab_JLabel_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\:    
+TrainTestSplitMaker_SeedTipText_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629
+FlowRunner_WaitUntilFinished_LogMessage_Text=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u0645\u062D\u0627\u0648\u0644\u0629 \u0644\u0648\u0642\u0641 \u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u062F\u0641\u0642\u0627\u062A ...
+SaverCustomizer_SetUpFile_FileChooser_SetFileFilter_GetDescription_Text=\u0627\u0644\u0645\u0633\u0627\u0631
+SerializedModelSaverCustomizer_SetUpFile_FfP_JLabel_Text=\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641\:
+Classifier_AcceptTestSet_Error_Text_Second=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+ClustererPerformanceEvaluator_AcceptClusterer_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639.
+Classifier_TrainingTask_Execute_StatusMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+LogPanel_Main_StatusMessage_Sixth=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u062E\u0637\u0623\! \u0627\u0644\u062F\u062C\u0627\u062C \u0623\u0643\u062B\u0631 \u062C\u0628\u0627\u0646\!
+Saver_AcceptInstance_LogMessage_Text_First=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+PredictionAppenderCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0645\u0636\u064A\u0641 \u0627\u0644\u062A\u0648\u0642\u0639\u0627\u062A
+LoaderCustomizer_SetUpDatabase_KeyLab_JLabel_Text=\u0627\u0644\u0623\u0639\u0645\u062F\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629\:
+Classifier_AcceptTrainingSet_StatusMessage_Text_Second=\u0645\u0634\u063A\u0648\u0644. \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0642\u0628\u0648\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u062D\u0627\u0644\u064A\u0627
+GraphViewer_DoPopup_Jf_JFrame_Text_First=\u0639\u0627\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629 \u0644\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+ClassifierPerformanceEvaluator_AcceptClassifier_StatusMessage_Text_First=\u062A\u0642\u064A\u064A\u0645 (
+KnowledgeFlowApp_StopB_SetToolTipText_Text=\u0648\u0642\u0641 \u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u0646\u0641\u064A\u0630\u0627\u062A 
+Saver_AcceptDataSet_Text_Second=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638.
+TextViewer_AppearanceDesign_BeanVisual_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0646\u0635
+ClassifierPerformanceEvaluator_AcceptClassifier_LogMessage_Text_First=[\u0645\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641] 
+FlowRunner_Run_Text_Second=...
+SerializedModelSaver_GlobalInfo_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u062F\u0631\u0628\u0629 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A  \u0645\u062A\u0633\u0644\u0633\u0644\u0629.
+Saver_AcceptInstance_Text_Second=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638.
+Classifier_TrainingTask_Execute_ModelString_Text_Third=\u0623\u0636\u0639\u0627\u0641 \u0627\u0644\u062A\u062F\u0631\u064A\u0628\: 
+Loader_LoadThread_LogMessage_Text_Second=\u0645\u062D\u0645\u0644
+PredictionAppender_AppendPredictedProbabilitiesTipText_Text=\u0623\u0636\u0641 \u0627\u0644\u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0628\u062F\u0644\u0627 \u0645\u0646 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 \u0644\u062A\u0648\u0642\u0639\u0627\u062A \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u0641\u0635\u0644\u0629
+ClassifierPerformanceEvaluator_AcceptClassifier_ResultT_Text_Second=\u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A\: 
+Loader_LoadThread_StatusMessage_Text_Seventh=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_AcceptTestSet_StatusMessage_Text_First=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+Saver_SaveBatchThread_Run_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Fifth=[\u0645\u0646\u0634\u0626 \u0623\u0642\u0633\u0627\u0645 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u0646\u0628\u0627\u0631] 
+TrainingSetMaker_NotifyTrainingSetProduced_LogMessage_Text_Second=\u0625\u064A\u0642\u0627\u0641.
+Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+ClassifierPerformanceEvaluator_AcceptClassifier_HtmlTitle_Text_Second=<br> (\u0627\u0644\u0641\u0626\u0629\: 
+LogPanel_Main_StatusMessage_Fourth=\u0627\u0644\u062E\u0637\u0648\u0629 1 | \u0628\u0639\u0636 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A \u0647\u0646\u0627 | \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621
+Saver_AcceptInstance_Error_Text_Second=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062D\u0641\u0638
+StripChart_ShowChart_Error_Text=\u0628\u062F\u0621 \u0627\u0644\u0645\u0639\u0627\u0644\u062C
+KnowledgeFlowApp_DoPopup_NameItem_MenuItem_Text=\u062A\u0639\u064A\u064A\u0646 \u0627\u0633\u0645
+SerializedModelSaver_AcceptClassifier_Message_Text_First=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+FlowRunner_RunSequentially_LogMessage_Text_First=\u0642\u0637\u0639 ...
+KnowledgeFlowApp_Main_Error_Text_Second=\n \u0627\u0644\u062E\u0631\u0648\u062C
+Saver_AcceptTestSet_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_SaveModel_LogMessage_Text_Third=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Clusterer_AcceptTrainingSet_ModelString_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+Classifier_AcceptTrainingSet_Msg_Text_Fourth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Saver_AcceptDataSet_LogMessage_Text_First=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+ClustererPerformanceEvaluator_GlobalInfo_Text=\u062A\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u062C\u0645\u0639\u064A\u0646 \u0627\u0644\u0645\u062A\u062F\u0631\u064A\u0628\u064A\u0646 \u0639\u0644\u0649 \u0627\u0644\u062F\u0641\u0639.
+GraphViewer_PerformRequest_Request_Text=\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C
+SerializedModelSaver_SaveModel_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C.
+KnowledgeFlowApp_DoPopup_Error_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0644\u0627 \u064A\u0648\u062C\u062F  \u0641\u0626\u0629 \u0645\u062E\u0635\u0635\u0629
+Filter_AcceptInstance_StatusMessage_Text_Sixth=\u064A\u0645\u0631 \u0639\u0644\u0649 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0641\u064A \u0627\u0646\u062A\u0638\u0627\u0631 ...
+ClustererPerformanceEvaluator_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0645\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u062C\u0645\u0639)
+Clusterer_AcceptTrainingSet_TitleString_Text=\u0627\u0644\u0646\u0645\u0648\u0630\u062C\: 
+Classifier_HandleIncrementalEvent_TitleString_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C\: 
+DataVisualizer_SetInstances_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u064A\u0631 (\u0645\u0635\u0648\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A)
+Loader_SetWrappedAlgorithm_IllegalArgumentException_Text=\: \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D \u0645\u0646 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 (\u0627\u0644\u0645\u062D\u0645\u0644)
+Clusterer_SaveModel_JOptionPane_ShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0645\u062C\u0645\u0639. \n
+KnowledgeFlowApp_XMLFilter_Text_Second=)
+DataVisualizer_Main_Error_Text_First=Usage\: DataVisualizer <dataset>
+Classifier_HandleIncrementalEvent_ModelString_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+TrainingSetMaker_NotifyTrainingSetProduced_Error_Text=\u0625\u0639\u0644\u0627\u0645 \u0627\u0644\u0645\u0633\u062A\u0645\u0639\u064A\u0646 ( \u0645\u0646\u0634\u0626\u064A\u0646 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628) 
+ClassAssignerCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0645\u0639\u064A\u0646 \u0627\u0644\u0641\u0626\u0629 
+Clusterer_SaveModel_LogMessage_Text_Fifth=[\u0627\u0644\u0645\u062C\u0645\u0639] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0645\u062C\u0645\u0639.   
+Classifier_TrainingTask_Execute_ModelString_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+ClassValuePicker_AssignClassValue_LogMessage_Text_Sixth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u0628\u062F\u064A\u0644 \u0642\u064A\u0645 \u0633\u0645\u0627\u062A \u0627\u0644\u0641\u0626\u0629
+Classifier_AcceptTestSet_Msg_Text_Second=\u062A\u062E\u0632\u064A\u0646 \u0646\u0645\u0648\u0630\u062C \u0644\u0644\u062A\u0634\u063A\u064A\u0644
+SerializedModelSaverCustomizer_SetUpFile_GetDescription_Text=\u0627\u0644\u0645\u0633\u0627\u0631
+KnowledgeFlowApp_StopB_LogPanel_StatusMessage_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u0645\u062D\u0627\u0648\u0644\u0629 \u0644\u0648\u0642\u0641 \u0643\u0627\u0641\u0629 \u0645\u0643\u0648\u0646\u0627\u062A ...
+SaverCustomizer_FileChooser_SetApproveButtonText_Text=\u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0633\u0627\u0631 \u0648 \u0627\u0644\u0628\u0627\u062F\u0626\u0629
+ClassifierPerformanceEvaluator_AcceptClassifier_StatusMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+TextViewer_Visualize_VisSepBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0641\u0635\u0644\u0629
+ClassifierPerformanceEvaluator_AcceptClassifier_LogMessage_Text_Third=[
+KnowledgeFlowApp_DoPopup_CustItem_MenuItem_Text_Second=\u0627\u0644\u062A\u0643\u0648\u064A\u0646\: 
+ClustererPerformanceEvaluator_AcceptClusterer_LogMessage_Text_Fourth=] \u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u0642\u064A\u064A\u0645\! 
+Classifier_AcceptTrainingSet_Msg_Text_Sixth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+KnowledgeFlowApp_Error_Text=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062A\u0647\u064A\u0626\u0629\:  
+Filter_AcceptInstance_LogMessage_Text_Second=\u062E\u0637\u0623 \: 
+StripChart_XLabelFreqTipText_Text=\u0639\u0631\u0636 \u0639\u0646\u0648\u0627\u064A\u0646 \u0627\u0644\u0645\u062D\u0648\u0631 \u0633  \u0641\u064A \u0643\u062B\u064A\u0631 \u0645\u0646 \u0627\u0644\u0623\u062D\u064A\u0627\u0646
+MetaBean_Visual_BeanVisual_Text=\u0645\u062C\u0645\u0648\u0639\u0629
+SaverCustomizer_SetUpFile_FileChooser_SetApproveButtonText_Text_Second=\u062D\u062F\u062F \u0627\u0644\u062F\u0644\u064A\u0644 \u0648\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+Saver_AcceptDataSet_Text_Fourth=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638.
+FlowRunner_Run_Text_Fourth=\u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0644\u064A.
+Loader_GetStartMessage_Entry_Text=\u0628\u062F\u0621 \u062A\u062D\u0645\u064A\u0644
+KnowledgeFlowApp_LoadUserComponents_Error_Text=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645.
+Classifier_HandleIncrementalEvent_Msg_Text_First=\u062E\u0637\u0623 \: \u0644\u0645 \u064A\u062A\u0645 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u0635\u0646\u0641 \u0639\u0644\u0649 \u0627\u0644\u062F\u0641\u0639 \u060C \u0644\u0627 \u064A\u0645\u0643\u0646 \u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A.
+TrainingSetMaker_GlobalInfo_Text=\u062A\u0639\u064A\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0627\u0631\u062F\u0629 \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 .
+LogPanel_Main_StatusMessage_First=\u0627\u0644\u062E\u0637\u0648\u0629 1 | \u0628\u0639\u0636 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A \u0647\u0646\u0627 | \u0631\u0633\u0627\u0644\u0629 \u062D\u0627\u0644\u0629
+Loader_LoadThread_LogMessage_Text_Fourth=\u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u062D\u0645\u064A\u0644\!
+Classifier_ConnectionNotification_LogMessage_Text_Fifth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0635\u0646\u0641.
+FlowRunner_WaitUntilFinished_Error_Text=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u0645\u062D\u0627\u0648\u0644\u0629 \u0644\u0648\u0642\u0641 \u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u062F\u0641\u0642\u0627\u062A ...
+ClassifierPerformanceEvaluator_AcceptClassifier_HtmlTitle_Text_Fifth=)  
+ClassValuePickerCustomizer_CustomizerClosing_Text=\u0645\u062E\u0635\u0635 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 \u0645\u0639 \u0645\u062E\u062A\u0627\u0631 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+SerializedModelSaver_AcceptClassifier_Message_Text_Third=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+SaverCustomizer_SetUpDatabase_IdLab_JLabel_Text=\u0645\u0641\u062A\u0627\u062D \u0631\u0626\u064A\u0633\u064A \u062A\u0644\u0642\u0627\u0626\u064A\: 
+LogPanel_Tabs_AddTab_Text_First=\u0627\u0644\u062D\u0627\u0644\u0629
+Classifier_AcceptTestSet_Msg_Text_Fifth=\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062A\u0634\u063A\u064A\u0644/ \u0627\u0644\u0648\u0636\u0639   
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Eighth=\u062A\u0646\u0628\u0624
+ClassifierPerformanceEvaluator_AcceptClassifier_HtmlTitle_Text_Fourth=(\u0627\u0644\u0641\u0626\u0629\:  
+LoaderCustomizer_SetUpDatabase_ButtonsP_Ok_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Fourth=\u0627\u0644\u0623\u0635\u0644\:  
+Saver_AcceptInstance_Text_First=...\u0627\u0644\u0639\u0644\u0627\u0642\u0629   
+Saver_AcceptDataSet_LogMessage_Text_Third=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+CostBenefitAnalysis_PercOfTarget_JRadioButton_Text=% \u0645\u0646 \u0627\u0644\u0647\u062F\u0641 (\u062A\u0630\u0643\u0631)
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Second=KnowledgeFlowApp.instantiateToolBarBean()
+CostBenefitAnalysis_AnalysisPanel_CostBenefitL_SetText_Text_First=\u0627\u0644\u062A\u0643\u0644\u0641\u0629\: 
+Filter_EnumerateRequests_Text=\u062A\u0648\u0642\u0641
+Saver_SaveBatchThread_Run_LogMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u062D\u0641\u0638.
+ClassifierPerformanceEvaluator_AcceptClassifier_ResultT_Text_First=\=\=\= \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \=\=\=\n\n\u0627\u0644\u0645\u062E\u0637\u0637\: 
+FilterCustomizer_FilterEditor_SetBorder_BorderFactory_CreateTitledBorder_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u0635\u0641\u064A\u0629
+SerializedModelSaver_UseDefaultVisual_Text=\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062D\u0627\u0641\u0638 \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644
+ClustererCustomizer_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+SerializedModelSaver_AcceptClusterer_Message_Text_Second=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+KnowledgeFlowApp_SaveLayout_StatusMessage_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062D\u0641\u0638 \u0627\u0644\u062A\u062F\u0641\u0642 (\u0627\u0646\u0638\u0631 \u0633\u062C\u0644).
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Seventh=\u062A\u0645 \u0627\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u0642\u0633\u064A\u064A\u0645\u0651
+Classifier_SaveModel_JOptionPane_ShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0645\u0635\u0646\u0641. \n
+Classifier_TrainingTask_Execute_Msg_Text_Second=\u0623\u0636\u0639\u0627\u0641 
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeNOMINAL_Text=(Nom) 
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Seventh=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+CrossValidationFoldMaker_AcceptDataSet_Msg_Text_Second=] \u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+TestSetMaker_NotifyTestSetProduced_LogMessage_Text_First=[\u0645\u0646\u0634\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631] 
+Filter_AcceptInstance_Error_Text_Second=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0647\u064A\u0643\u0644\u0629 \u0628\u0639\u062F \u0627\u0644\u062A\u0635\u0641\u064A\u0629
+KnowledgeFlowApp_DeleteConnectionPopup_DeleteConnection_MenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0627\u062A\u0635\u0627\u0644\:
+TextViewer_ShowResults_Js_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0646\u0635
+KnowledgeFlowApp_LoadProperties_Error_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u062D\u0630\u064A\u0631 \: \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u062D\u0645\u064A\u0644 \u062E\u0635\u0627\u0626\u0635 bean \u0644\u0644\u0645\u0633\u0627\u0631 plugin\: 
+Classifier_HandleIncrementalEvent_LogMessage_Text_Sixth=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u062A\u0635\u0627\u0639\u062F\u064A\u0629
+KnowledgeFlowApp_LoadInitialLayout_Error_Text_Second=' \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F
+Classifier_TrainingTask_Execute_LogMessage_Text_Second=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Sixth=|\u0623\u0636\u0639\u0627\u0641 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Second=\u0627\u0644\u0623\u0636\u0639\u0627\u0641\: 
+Classifier_AcceptTestSet_Msg_Text_Fourth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Filter_AcceptInstance_StatusMessage_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u062A\u0633\u062A\u062E\u062F\u0645 \u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u062F\u0641\u0639\u0627\u062A.
+LoaderCustomizer_SetUpDatabase_PasswordLab_JLabel_Text=\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\:    
+Saver_SaveBatchThread_Run_LogMessage_Text_Sixth=\u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062D\u0641\u0638\!\!
+KnowledgeFlowApp_LoadLayout_LogMessage_Text_Second=).
+ClustererPerformanceEvaluator_AcceptClusterer_LogMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+Saver_SaveBatchThread_Run_LogMessage_Text_Second=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638 \u0628\u0646\u062C\u0627\u062D.
+Filter_AcceptInstance_LogMessage_Text_Fourth=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Classifier_HandleIncrementalEvent_Msg_Text_Third=\u062A\u062D\u0630\u064A\u0631\: \u0647\u064A\u0643\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u062A\u062E\u062A\u0644\u0641 \u0639\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062E\u062F\u0645\u0629 \u0641\u064A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0644\u0649 \u0627\u0644\u062F\u0641\u0639\u0627\u062A \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0635\u0646\u0641. \u0625\u0639\ [...]
+IncrementalClassifierEvaluator_AcceptClassifier_Result_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0623\u062F\u0627\u0621 \=\=\=\n\n\u0627\u0644\u0645\u062E\u0637\u0637\:   
+LogPanel_Main_StatusMessage_Third=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u0627\u0644\u062F\u062C\u0627\u062C \u062C\u0628\u0627\u0646\!
+Associator_AcceptDataSet_ModelString_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+Classifier_SaveModel_StatusMessage_Text_Second=\u062E\u0637\u0623 \: \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C (\u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644)
+ClassValuePicker_AssignClassValue_LogMessage_Text_First=[\u0645\u062E\u062A\u0627\u0631 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629]   
+IncrementalClassifierEvaluator_AcceptClassifier_TextTitle_Text=\u0627\u0644\u0646\u062A\u0627\u0626\u062C\: 
+KnowledgeFlowApp_DoPopup_AddToUserTabItem_MenuItem_Text=\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u0628\u0648\u064A\u0628 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+KnowledgeFlowApp_LoadProperties_Exception_JOptionPaneShowMessageDialog_Text=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+Saver_AcceptTrainingSet_LogMessage_Text_First=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+Clusterer_AcceptTrainingSet_GrphTitle_Text_First=\u0645\u062C\u0645\u0648\u0639\u0629
+Classifier_XStreamFilter_ExtensionFileFilter_Text_Second=)
+Saver_AcceptInstance_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0643\u0648\u0646 \u062A\u0645 \u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0645\u0644\u0641 .
+KnowledgeFlowApp_XStreamFilter_Text_First=kf
+Classifier_AcceptTrainingSet_Msg_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+StripChart_Main_Error_Text=\u062A\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A 
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_Sixth=\u062E\u0637\u0623 \u0641\u064A \u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u062A\u0648\u0642\u0639
+Loader_LoadThread_StatusMessage_Text_Sixth=\u062D\u0627\u0644\u0627\u062A
+BeanConnection_GetSourceEventSetDescriptor_Error_Text_First=[BeanConnection] \u062E\u0637\u0623 \u0641\u064A \u0625\u062D\u0636\u0627\u0631 \u0645\u0639\u0644\u0648\u0645\u0627\u062A bean, \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0645\u0635\u062F\u0631 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\u0629.
+FlowRunner_Run_Text_Fifth=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642]  \u0625\u0636\u0627\u0641\u0629 \u0646\u0642\u0637\u0629 \u0628\u062F\u0627\u064A\u0629 
+BeanInstance_AddBean_Error_Text=\u0627\u0644\u0645\u0643\u0648\u0646 \u063A\u064A\u0631 \u0645\u0631\u0626\u064A\!
+ClassifierPerformanceEvaluator_AcceptClassifier_ResultT_Text_Third=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+Classifier_TrainingTask_Execute_Msg_Text_First=\u0628\u0646\u0627\u0621 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0644\u0644\u062A\u0634\u063A\u064A\u0644 
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_JLabel_Text_Second=% \u0645\u0646 \u0627\u0644\u0647\u062F\u0641\:  
+SerializedModelSaverCustomizer_Error_Text=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u062E\u0627\u0635\u064A\u0629\!
+Filter_AcceptTestSet_StatusMessage_Text_First=\u062A\u0635\u0641\u064A\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631  (
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Fifth=\u0645\u0639 
+SaverCustomizer_Error_Text=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u062E\u0627\u0635\u064A\u0629\!
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Fourth=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F
+BeanConnection_Error_Text_Second=[BeanConnection] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0648\u0635\u0644 beans
+SaverCustomizer_SetUpFile_PrefixLab_JLabel_Text=\u0628\u0627\u062F\u0626\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:
+SerializedModelSaver_AcceptClassifier_Message_Text_Fourth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+TestSetMaker_NotifyTestSetProduced_LogMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+CostBenefitAnalysis_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0644\u0644\u0623\u062F\u0627\u0621  ( \u0645\u062B\u0644  ROC).
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Sixth=\u0645\u0634\u0643\u0644\u0629 \u0623\u062B\u0646\u0627\u0621 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0636\u0639\u0627\u0641.
+SerializedModelSaver_AcceptClusterer_StatusMessage_Text_Second=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Filter_AcceptInstance_LogMessage_Text_Fifth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0647\u064A\u0643\u0644 \u0628\u0639\u062F \u0627\u0644\u062A\u0635\u0641\u064A\u0629.
+Classifier_TrainingTask_Execute_TitleString_Text_Fifth=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u0627\u062A\u0645\u0627\u0645.
+CrossValidationFoldMaker_SeedTipText_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+KnowledgeFlowApp_LoadInitialLayout_Error_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0627\u0644\u0645\u0644\u0641 '
+SerializedModelSaver_Visual_BeanVisual_Text=AbstractDataSink
+SerializedModelSaver_AcceptClusterer_Message_Text_Fourth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+KnowledgeFlowApp_SaveLayout_LogMessage_Text_Second=).
+FlowRunner_LoadXML_Exception_Text=\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0644\u0641 \u062A\u062F\u0641\u0642 XML (* . kfml )
+ClustererPerformanceEvaluator_AcceptClusterer_ResultT_Text_Fourth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+Filter_AcceptInstance_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+IncrementalClassifierEvaluator_AcceptClassifier_StatusMessage_Text_Fifth=\u062E\u0637\u0623 \: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u062A\u0648\u0642\u0639 (\u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644) 
+LogPanel_Tabs_AddTab_Text_Second=\u0633\u062C\u0644
+ScatterPlotMatrix_PerformRequest_Jf_JFrame_Text=\u062A\u0645\u062B\u064A\u0644
+ClassifierPerformanceEvaluator_GlobalInfo_Text=\u062A\u0642\u064A\u064A\u0645 \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641\u064A\u0646 \u0627\u0644\u0645\u062A\u062F\u0631\u064A\u0628\u064A\u0646 \u0639\u0644\u0649 \u0627\u0644\u062F\u0641\u0639.
+SaverCustomizer_SetUpFile_RelativeFilePath_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0633\u0627\u0631\u0627\u062A \u0645\u0644\u0641 \u0646\u0633\u0628\u064A\u0629
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_Second=\u062A\u0645 \u0628\u062F\u0621 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629...
+Classifier_TrainingTask_Execute_LogMessage_Text_Fourth=(\u0628\u0646\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641). 
+SerializedModelSaver_AcceptClusterer_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+SerializedModelSaverCustomizer_SetUpFile_RelativeFilePath_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0633\u0627\u0631\u0627\u062A \u0645\u0644\u0641 \u0646\u0633\u0628\u064A\u0629
+KnowledgeFlowApp_KfFilter_Text_First=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u0643\u0648\u064A\u0646 \u0644\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A (*
+ClustererPerformanceEvaluator_AcceptClusterer_StatusMessage_Text_First=\u062A\u0642\u064A\u064A\u0645 (
+ClustererPerformanceEvaluator_AcceptClusterer_ResultT_Text_First=\=\=\= \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0644\u0640  
+ClassValuePicker_AssignClassValue_LogMessage_Text_Third=[\u0645\u062E\u062A\u0627\u0631 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629]   
+FlowRunner_Run_LogMessage_Text_Seventh=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642]  \u0625\u0636\u0627\u0641\u0629 \u0646\u0642\u0637\u0629 \u0628\u062F\u0627\u064A\u0629 
+Classifier_TrainingTask_Execute_GrphTitle_Text_First=\u0645\u062C\u0645\u0648\u0639\u0629
+BeanInstance_RemoveBean_Error_Text=\u0627\u0633\u062A\u0642\u0628\u0627\u0644 bean
+Associator_AcceptDataSet_StatusMessage_Text_Fourth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+FlowRunner_LoadBinary_Exception_Text_First=\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0645\u0644\u0641 \u0639\u0644\u0649 \u062A\u062F\u0641\u0642 \u062B\u0646\u0627\u0626\u064A (* . KF )
+Filter_AcceptInstance_StatusMessage_Text_Fourth_Alpha=\u062A\u0645
+CostBenefitAnalysis_MinimizeCB_JButton_Text=\u062A\u0642\u0644\u064A\u0644 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629
+Classifier_HandleIncrementalEvent_Messg_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+TrainTestSplitMaker_TrainPercentTipText_Text=\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064A\u0629 \u0644\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0644\u0644\u0630\u0647\u0627\u0628 \u0627\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+SaverCustomizer_SetUpFile_RelationNameForFilename_JCheckBox_Text=\u0627\u0633\u0645 \u0639\u0644\u0627\u0642\u0629 \u0644\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+PredictionAppender_AcceptClusterer_StatusMessage_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u0641\u0642\u0637 \u0627\u0644\u0645\u062C\u0645\u0639 \u0627\u0644\u0645\u0639\u062A\u0645\u062F \u0639\u0644\u0649 \u0627\u0644\u0643\u062B\u0627\u0641\u0629 \u064A\u0645\u0643\u0646\u0647 \u0623\u0646 \u064A\u0636\u064A\u0641 \u0627\u0644\u0625\u062D\u062A\u0645\u0627\u0644\u0627\u062A. \u0628\u062F\u0644\u0627 \u0645\u0646 \u0627\u0644\u0630\u0644\u0643 \u0633\u064A\u062A\u0645 \u062A\u062D\ [...]
+Classifier_HandleIncrementalEvent_Error_Text_Second=]
+Classifier_HandleIncrementalEvent_LogMessage_Text_First=[
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Second=\u062F\u0642\u0629
+SerializedModelSaver_AcceptClassifier_Message_Text_Second=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u0627\u0644\u0633\u0628\u0628\: 
+KnowledgeFlowApp_XStreamFilter_Text_Third=kf)
+Classifier_AcceptTrainingSet_Msg_Text_Third=\u0627\u0644\u0641\u062A\u062D)... 
+KnowledgeFlowApp_LoadLayout_StatusMessage_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642 (\u0627\u0646\u0638\u0631 \u0633\u062C\u0644).
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_First=\u0627\u0644\u0623\u0635\u0644\:  
+ScatterPlotMatrix_Main_Error_Text=Usage\: ScatterPlotMatrix <dataset>
+Classifier_TrainingTask_Execute_LogMessage_Text_Sixth=\u0623\u0636\u0639\u0627\u0641 
+TrainingSetMaker_NotifyTrainingSetProduced_LogMessage_Text_Fifth=
+SerializedModelSaver_FileFormatsAvailable_Text_Sixth=)
+Saver_SaveBatchThread_Run_LogMessage_Text_First=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+Associator_AcceptDataSet_TitleString_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C\: 
+CostBenefitAnalysis_AnalysisPanel_PopHolder_Add_JLabel_Text=\u0639\u062F\u062F \u0627\u0644\u0633\u0643\u0627\u0646\:
+ClassifierCustomizer_UpdateIncrementalClassifier_SetToolTipText_Text=\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u0635\u0646\u0641 \u0644\u0643\u0644 \u062D\u0627\u0644\u0629 \u0645\u062A\u062F\u0641\u0642\u0629 \u0642\u0627\u062F\u0645\u0629.
+ClustererPerformanceEvaluator_AcceptClusterer_ResultT_Text_Second=\u0627\u0644\u062D\u0627\u0644\u0627\u062A \=\=\=\n\n
+Saver_AcceptDataSet_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Filter_AcceptInstance_StatusMessage_Text_Tenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A.
+ClassValuePickerCustomizer_MessageLabel_JLabel_Text=\u0644\u0627 \u064A\u0645\u0643\u062A \u0644\u0644\u062A\u062E\u0635\u064A\u0635 \u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0636\u0631 .
+Filter_AcceptTestSet_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644).
+Saver_AcceptInstance_LogMessage_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0646\u0633\u062E \u0627\u0644\u0645\u062E\u0632\u0651\u0646
+KnowledgeFlowApp_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0645\u0639\u0627\u0644\u062C\u0629 \u062D\u0632\u0645\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645... 
+GraphViewer_SetUpResultHistory_History_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+BeanConnection_Error_Text_First=[BeanConnection] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0648\u0635\u0644 beans
+PredictionAppender_AcceptClusterer_LogMessage_Text_Second=\u0641\u0642\u0637 \u0627\u0644\u0645\u062C\u0645\u0639 \u0627\u0644\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0627\u0644\u0643\u062B\u0627\u0641\u0629 \u064A\u0645\u0643\u0646\u0647 \u0627\u0636\u0627\u0641\u0629 \u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A. \u0628\u062F\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643 \u0633\u064A\u0642\u0648\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 \u0628\u0625\u0639\u0637\u0627\u0621 \u064 [...]
+KnowledgeFlowApp_StopB_LogPanel_StatusMessage_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] | \u0645\u0648\u0627\u0641\u0642.
+ClassifierPerformanceEvaluator_AcceptClassifier_StatusMessage_Text_Second=) ...
+Classifier_ConnectionNotification_StatusMessage_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0645\u0644.
+Associator_AcceptDataSet_StatusMessage_Text_Second=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Associator_AcceptDataSet_StatusMessage_Text_First=\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C ...
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_First=[\u0645\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0635\u0627\u0639\u062F\u064A]
+Clusterer_LoadModel_JOptionPane_ShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0635\u0646\u0641.
+InstanceStreamToBatchMaker_AcceptInstance_LogMessage_Text_Second=[InstanceStreamToBatch] \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0623\u0642\u0633\u0627\u0645 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u062A\u0645\u0639\u064A\u0646.
+Loader_LoadThread_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+ClassAssigner_AssignClass_LogMessage_Text=\u0639\u0645\u0648\u062F \u0627\u0644\u0641\u0626\u0629 \u062E\u0627\u0631\u062C \u0646\u0637\u0627\u0642 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ( \u0645\u0646\u062A\u0642\u064A \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 )
+FlowRunner_Run_LogMessage_Text_Fifth=[\u0645\u0634\u063A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642] \u062A\u062D\u0630\u064A\u0631 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0628\u062F\u0621 
+ScatterPlotMatrix_AppearanceDesign_BeanVisual_Text=ScatterPlotMatrix
+CostBenefitAnalysis_AnalysisPanel_CostPanel_SetBorder_BorderFactory_CcreateTitledBorder_Text=\u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u0643\u0644\u0641\u0629
+KnowledgeFlowApp_MouseClicked_LogPanel_LogMessage_Text_Fifth=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0627\u0644\u0630\u0627\u0643\u0631\u0629  (\u0627\u0644\u0641\u0627\u0631\u063A\u0629 / \u0627\u0644\u0645\u062C\u0645\u0648\u0639 / \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649.) \u0628\u0627\u0644\u0628\u0627\u064A\u062A\: 
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+KnowledgeFlowApp_KfFilter_Text_Second=)
+Filter_AcceptInstance_Error_Text_First=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+LogPanel_StatusMessage_StepName_Text=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+ClassAssigner_NotifyTestListeners_Error_Text=\u0625\u0639\u0644\u0627\u0645 \u0645\u0633\u062A\u0645\u0639\u064A\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ( \u0645\u0639\u064A\u0646 \u0627\u0644\u0641\u0626\u0629 )
+Associator_SetWrappedAlgorithm_IllegalArgumentException_Text=\: \u0646\u0648\u0639 \u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D (\u0627\u0644\u0631\u0627\u0628\u0637)
+GraphViewer_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A)
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Sixth=RMSE (prob)
+ClustererPerformanceEvaluator_AcceptClusterer_StatusMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+ClustererPerformanceEvaluator_AcceptClusterer_ResultT_Text_Third=\u0627\u0644\u0645\u062E\u0637\u0637\:
+TextViewer_PerformRequest_IllegalArgumentException_Text=(\u0639\u0627\u0631\u0636 \u0646\u0635\u0648\u0635) \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645
+SerializedModelSaver_SaveModel_Error_Text=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_First=[
+ClassifierCustomizer_OKBut_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+KnowledgeFlowApp_XStreamFilter_Text_Second=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 XML (*
+Saver_AcceptDataSet_StatusMessage_Text_Second=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Classifier_HandleIncrementalEvent_LogMessage_Text_Third=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_Fourth=\u0627\u0646\u0647\u0627\u0621 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629.
+CostBenefitAnalysis_Threshold_JRadioButton_Text=\u0646\u0642\u0627\u0637 \u0627\u0644\u062D\u062F
+CrossValidationFoldMaker_AcceptDataSet_StatusMessage_Text_Third=|\u0623\u0636\u0639\u0627\u0641 \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+TextViewer_SetUpFinal_JScrollPane_BorderFactoryCreateTitledBorder_Text=\u0646\u0635
+ClassifierCustomizer_UpdateIncrementalClassifier_JCheckBox_Text=\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u0635\u0646\u0641 \u0639\u0644\u0649 \u0627\u0644\u062A\u062F\u0641\u0642 \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0644\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+Classifier_AcceptTrainingSet_StatusMessage_Text_First=\u0645\u0634\u063A\u0648\u0644. \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0642\u0628\u0648\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u062D\u0627\u0644\u064A\u0627
+IncrementalClassifierEvaluator_StatusFrequencyTipText_Text=\ \u0639\u062F\u062F \u0627\u0644\u0645\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u064A\u062F \u0638\u0647\u0631 \u062A\u0642\u0631\u064A\u0631 \u0627\u0644\u062D\u0627\u0644\u0629 \u0641\u064A \u0634\u0631\u064A\u0637 \u0627\u0644\u062D\u0627\u0644\u0627\u062A.
+SaverCustomizer_SetUpFile_FileChooser_SetApproveButtonText_Text_First=\u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0633\u0627\u0631 \u0648 \u0627\u0644\u0628\u0627\u062F\u0626\u0629
+FlowRunner_RunSequentially_LogMessage_Text_Second=\u0642\u0637\u0639 ...
+Saver_SaveBatchThread_Run_LogMessage_Text_Third=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+Saver_AcceptTrainingSet_Text_Second=\u0645\u0646 
+SaverCustomizer_SetUpDatabase_DbaseURLLab_JLabel_Text=\u0631\u0627\u0628\u0637 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\: 
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Fourth=RRSE
+Loader_LoadThread_Msg_Text_First=\u062A\u062D\u0645\u064A\u0644
+CrossValidationFoldMaker_FoldsTipText_Text=\u0639\u062F\u062F \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+Classifier_SetWrappedAlgorithm_IllegalArgumentException_Text_First=\: \u0646\u0648\u0639 \u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D  (\u0627\u0644\u0645\u0635\u0646\u0641)
+SaverCustomizer_SetUpDatabase_ButtonsP_Ok_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+Classifier_KOMLFilter_ExtensionFileFilter_Text_Second=)
+LogPanel_Main_StatusMessage_Seventh=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u062A\u062D\u0630\u064A\u0631 - \u0627\u0644\u0622\u0646 \u062A\u062D\u0630\u064A\u0631\u0627 ...
+Classifier_HandleIncrementalEvent_ModelString_Text_First=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0635\u0646\u064A\u0641 \=\=\=\n\n\u0627\u0644\u0645\u062E\u0637\u0637\:   
+ClassValuePicker_AssignClassValue_LogMessage_Text_Second=\u0644\u0627 \u064A\u0648\u062C\u062F \u0633\u0645\u0629 \u0644\u0644\u0645\u0641\u0626\u0629 \u0645\u0639\u064E\u0631\u0641\u0629 \u0641\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A.
+AttributeSummarizer_GlobalInfo_Text=\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0646\u0627\u064A \u0644\u0634\u0631\u064A\u0637 \u0627\u0644\u0645\u0644\u062E\u0635 \u0644\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0623\u0648 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631.
+CostBenefitAnalysis_AnalysisPanel_ThreshInfoPanel_AccHolder_Add_JLabel_Text=\u062F\u0642\u0629 \u0627\u0644\u0645\u0635\u0646\u0641 
+StripChart_PerformRequest_IllegalArgumentException_Text=\u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645 (\u0645\u062E\u0637\u0637 \u0627\u0644\u0642\u0637\u0627\u0639)
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Sixth=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0633\u0645.
+KnowledgeFlowApp_InstallWindowListenerForSavingUserBeans_Error_Text_Second=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062D\u0641\u0638 \u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+IncrementalClassifierEvaluator_AcceptClassifier_Result_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+KnowledgeFlowApp_LoadProperties_Exception_Text_Second=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u062A\u0643\u0648\u064A\u0646 \u0645\u0646 \u0623\u062C\u0644 \u0644\u0648\u062D\u0629 bean. \u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0645\u0648\u062C\u0648\u062F \u0641\u064A \u0645\u0648\u0632\u0639  \u0648\u064A\u0643\u0627.\n\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u062A\u0 [...]
+Saver_AcceptTestSet_Text_Second=\u0645\u0646 
+Associator_AcceptDataSet_StatusMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+IncrementalClassifierEvaluator_AcceptClassifier_LogMessage_Text_Third=[\u0645\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0635\u0627\u0639\u062F\u064A]
+Classifier_TrainingTask_Execute_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Saver_AcceptTrainingSet_LogMessage_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0646\u0633\u062E \u0627\u0644\u0645\u062E\u0632\u0651\u0646
+FlowRunner_Run_Text_Seventh=)
+KnowledgeFlowApp_HelpB_SetToolTipText_Text=\u0639\u0631\u0636 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+CostBenefitAnalysis_BenefitR_JRadioButton_Text=\u0645\u0646\u0641\u0639\u0629
+Loader_LoadThread_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+ClassValuePicker_GetConnectedFormat_Error_Text=\u0641\u0627\u0631\u063A \!
+Filter_AcceptInstance_StatusMessage_Text_Nineth=\u062A\u0645 \u0627\u0633\u062A\u0642\u0628\u0627\u0644\u0647\u0627. 
+SerializedModelSaver_FileFormatsAvailable_Text_First=\ \u0645\u0644\u0641 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644 \u0627\u0644\u062B\u0646\u0627\u0626\u064A (*
+ClassifierCustomizer_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+SerializedModelSaver_FileFormatsAvailable_Text_Second=)
+KnowledgeFlowApp_Init_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u062A\u0643\u0648\u064A\u0646 \u0645\u0646 \u0623\u062C\u0644 \u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645. \u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0641\u064A \u0645\u0648\u0632\u0639 \u0648\u064A\u0643\u0627.\n\u064A\u062C\u062 [...]
+KnowledgeFlowApp_DoPopup_CustItem_MenuItem_Text_First=\u0627\u0644\u062A\u0643\u0648\u064A\u0646 ...
+ClassifierPerformanceEvaluator_AcceptClassifier_StatusMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+SaverCustomizer_SetUpDatabase_TabLab_JLabel_Text=\u0627\u0633\u062A\u062E\u062F\u0645 \u0627\u0633\u0645 \u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+Classifier_AcceptTestSet_ErrorMessage_Text_First_Alpha=\u062E\u0637\u0623\: \u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0635\u0646\u0641 \u0645\u062F\u0631\u0628 \u0623\u0648 \u0645\u062D\u0645\u0644 \u0644\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u0644\u062A\u0646\u0628\u0624\!
+GraphViewer_DoPopup_Error_Text=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u0645\u062B\u064A\u0644  BayesNet
+KnowledgeFlowApp_SaveLayout_LogMessage_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062D\u0641\u0638 \u0627\u0644\u062A\u062F\u0641\u0642 (
+Loader_LoadThread_LogMessage_Text_First=[\u0627\u0644\u0645\u062D\u0645\u0644] 
+AttributeSummarizer_SetInstances_Exception_Text=\u0644\u0627 \u064A\u0646\u0628\u063A\u064A \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0623\u062B\u0646\u0627\u0621 \u0648\u0642\u062A \u0627\u0644\u062A\u0635\u0645\u064A\u0645. \u0648\u0645\u0646 \u0627\u0644\u0645\u0641\u062A\u0631\u0636 \u0623\u0646 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A \u062D\u0627\u0644\u0629 \u0627\u0633\u [...]
+Loader_LoadThread_StatusMessage_Text_Nineth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+CrossValidationFoldMaker_AcceptDataSet_LogMessage_Text_Third=[
+CrossValidationFoldMaker_AcceptDataSet_Msg_Text_First=[
+Clusterer_LoadModel_LogMessage_Text_First=[\u0627\u0644\u0645\u062C\u0645\u0639] \u0627\u0644\u0645\u062C\u0645\u0639 \u0627\u0644\u0645\u062D\u0645\u0644\:    
+Classifier_HandleIncrementalEvent_StatusMessage_Text_Second=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+LoaderCustomizer_SetUpDatabase_QueryLab_JLabel_Text=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645\: 
+Classifier_AcceptTrainingSet_Msg_Text_Seventh=\u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0627\u0644\u0632\u0645\u0646\u064A\u0629
+LogPanel_StatusMessage_StepHash_Text=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+KnowledgeFlowApp_DoPopup_DeleteItem_MenuItem_Text=\u062D\u0630\u0641
+CostBenefitAnalysis_AnalysisPanel_CbHolder_TempP_JPanel_Add_JLabel_Text_Second=\u0627\u0644\u0631\u0628\u062D\: 
+Filter_AcceptTestSet_LogMessage_Text_Second=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Filter_ProcessTrainingOrDataSourceEvents_LogMessage_Text_Second=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Filter_ProcessTrainingOrDataSourceEvents_Visual_SetText_Text=\u062A\u0635\u0641\u064A\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+KnowledgeFlowApp_DoPopup_Error_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062E\u0637\u0623 \u0641\u064A  doPopup()
+Classifier_HandleIncrementalEvent_Messg_Text_Second=\u064A\u0642\u0648\u0645 \u062D\u0627\u0644\u064A\u0627 \u0628\u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0644\u0649 \u0627\u0644\u0623\u062C\u0632\u0627\u0621
+StripChart_BeanVisual_Text=\u0645\u062E\u0637\u0637 \u0627\u0644\u0645\u0633\u0627\u0631
+CrossValidationFoldMaker_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A)
+DataVisualizer_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0639\u0627\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A)");
+GraphViewer_ShowResult_ResultsFrame_JFrame_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0628\u064A\u0627\u0646\u064A 
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_Second=)
+KnowledgeFlowApp_NewB_SetToolTipText_Text=\u0645\u0633\u062D \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+ClassAssignerCustomizer_SetUpColumnSelection_AttribNames0_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0641\u0626\u0629
+KnowledgeFlowApp_SetUpPluginsToolBar_PluginsBoxPanel_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A
+ClassValuePickerCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0645\u0646\u062A\u0642\u064A \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Sixth_Alpha=\u0645\u0634\u0643\u0644\u0629 \u062E\u0644\u0627\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0633\u0645.
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_First=\u0627\u0644\u062B\u0642\u0629
+DataVisualizer_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 \u0644\u0644\u062A\u062F\u0631\u064A\u0628 \u0623\u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0641\u064A \u062A\u0645\u062B\u064A\u0644  \u062B\u0646\u0627\u0626\u064A \u0627\u0644\u0623\u0628\u0639\u0627\u062F \u0645\u0628\u0639\u062B\u0631
+FlowRunner_Run_LogMessage_Text_Nineth=)
+LoaderCustomizer_SetUpDatabase_ButtonsP_Cancel_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+Classifier_BinaryFilter_ExtensionFileFilter_Text_First=\ \u0645\u0644\u0641 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644 \u0627\u0644\u062B\u0646\u0627\u0626\u064A (*
+Saver_AcceptTrainingSet_Text_Fourth=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638.
+Classifier_AcceptTrainingSet_LogMessage_Text_Second=\u0645\u0634\u063A\u0648\u0644. \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0642\u0628\u0648\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u062D\u0627\u0644\u064A\u0627
+ClassValuePickerCustomizer_HolderP_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0627\u062E\u062A\u064A\u0627\u0631 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+StripChart_ShowChart_WindowClosing_Error_Text=\u0645\u0642\u0627\u0637\u0639\u0629
+Filter_AcceptInstance_LogMessage_Text_Seventh=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+Associator_AcceptDataSet_ModelString_Text_First=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0631\u0628\u0637 \=\=\=\n\n\u0627\u0644\u0645\u062E\u0637\u0637\:   
+Clusterer_SetWrappedAlgorithm_IllegalArgumentException_Text=\: \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D \u0645\u0646 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 (\u0627\u0644\u0645\u062C\u0645\u0639)
+Classifier_HandleIncrementalEvent_LogMessage_Text_Second=]
+Classifier_TrainingTask_Execute_LogMessage_Text_Third=\: \u0625\u0641\u062A\u0631\u0627\u0636 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0623\u062E\u064A\u0631 \u0647\u0648 \u0627\u0644\u0641\u0626\u0629
+StripChart_ShowChart_LegendPanel_SetBorder_BorderFactoryCreateEtchedBorder_Text=\u0623\u0633\u0637\u0648\u0631\u0629 
+ClassValuePicker_AssignClassValue_LogMessage_Text_Fourth=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0627\u0633\u0645\u064A\u0629 (\u0645\u0646\u062A\u0642\u064A \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629)
+SerializedModelSaver_FileFormatsAvailable_Text_Third=\ \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062A\u0633\u0644\u0633\u0644 XML  (*
+KnowledgeFlowApp_SaveLayout_StatusMessage_Text_First=[\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u0645 \u062D\u0641\u0638 \u0627\u0644\u062A\u062F\u0641\u0642
+ClassifierPerformanceEvaluator_AcceptClassifier_StatusMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+Classifier_AcceptTestSet_Msg_Text_Sixth=\u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u062A\u0645\u0639.  
+KnowledgeFlowApp_Init_Exception_JOptionPaneShowMessageDialog_Text_Third=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+ModelPerformanceChart_PerformRequest_Jf_JFRame_Text=\u0646\u0645\u0648\u0630\u062C \u0623\u062F\u0627\u0621 \u0627\u0644\u0645\u062E\u0637\u0637
+Filter_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0627\u0644\u0641\u0644\u062A\u0631)
+ClassValuePicker_AssignClassValue_StatusMessage_Text_Second=\u062A\u062D\u0630\u064A\u0631\: \u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0625\u0633\u0645\u064A\u0629.
+KnowledgeFlowApp_LoadProperties_Exception_Text_Fourth=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+Saver_AcceptTestSet_Text_Fourth=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638.
+TextViewer_Visualize_VisMainBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+IncrementalClassifierEvaluator_OutputPerClassInfoRetrievalStatsTipText_Text=\u0641\u062A\u0631\u0629 \u0627\u0633\u062A\u0631\u062C\u0627\u0639 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0644\u0644\u0646\u062A\u0627\u0626\u062C \u0644\u0643\u0644 \u0641\u0626\u0629. \u0625\u0630\u0627 \u062A\u0645 \u0648\u0636\u0639\u0647\u0627 \u0644\u0642\u064A\u0645\u0629 true \u0633\u064A\u062A\u0645 \u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u062A\u0648\u0642\u0639\u0627\u062A \u062D\ [...]
+BeanConnection_DoMetaConnection_TargetConnectionMenu_Insert_Text_First=\u062D\u062F\u062F \u0627\u0644\u0647\u062F\u0641
+SerializedModelSaver_AcceptClassifier_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+AttributeSummarizer_Main_Error_Text_First=Usage\: AttributeSummarizer <dataset>
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeNUMERIC_Text=(\u0631\u0642\u0645)
+Loader_LoadThread_LogMessage_Text_Third=[\u0627\u0644\u0645\u062D\u0645\u0644] 
+KnowledgeFlowApp_SetUpUserToolBar_AddTab_Text_First=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+SerializedModelSaver_FileFormatsAvailable_Text_Fourth=)
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_First=[\u0645\u0646\u0634\u0626 \u0623\u0642\u0633\u0627\u0645 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u0646\u0628\u0627\u0631] 
+CostBenefitAnalysis_PerformRequest_Main_JF_JFrame_Text=\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 \u0648 \u0627\u0644\u0645\u0646\u0641\u0639\u0629
+StripChartCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0645\u062E\u0637\u0637 \u0627\u0644\u0645\u0633\u0627\u0631 
+SerializedModelSaver_AcceptClusterer_Message_Text_First=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+ModelPerformanceChart_GlobalInfo_Text=\u062A\u0645\u062B\u064A\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0644\u0644\u0623\u062F\u0627\u0621  ( \u0645\u062B\u0644  ROC).
+Saver_SetWrappedAlgorithm_IllegalArgumentException_Text=\: \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D \u0645\u0646 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 (\u0627\u0644\u0645\u062D\u0645\u0644)
+SerializedModelSaver_AcceptClassifier_Message_Text_Fifth=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+KnowledgeFlowApp_LoadProperties_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0648\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A ...
+KnowledgeFlowApp_InsertUserOrStartableMenuItem_Result_JOptionPane_ShowConfirmDialog_Text=\u062A\u0623\u0643\u064A\u062F \u0627\u0644\u0639\u0645\u0644
+PredictionAppender_AcceptClassifier_RelationNameModifier_Text=\u0645\u0639 \u0627\u0644\u062A\u0646\u0628\u0624\u0627\u062A
+TrainingSetMaker_SetText_Text=\u0645\u0646\u062A\u062C \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u0628\u0627\u0631
+LogPanel_Main_Jf_JFrame_Text=\u0627\u0644\u062D\u0627\u0644\u0629 / \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u0633\u062C\u064A\u0644
+Classifier_HandleIncrementalEvent_Msg_Text_Second=\u062E\u0637\u0623\:  \u062D\u0627\u0644\u0629 \u0628\u0646\u064A\u0629 \u0627\u0644\u062D\u062F\u062B \u062A\u062E\u062A\u0644\u0641 \u0639\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0644\u062A\u062F\u0631\u064A\u0628 \u062F\u0641\u0639\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0635\u0646\u0641. \u0644\u0627 \u064A\u0645\u0643\u0 [...]
+ClassifierCustomizer_HolderPanel_SetBorder_BorderFactory_CreateTitledBorder_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0623\u0643\u062B\u0631
+Saver_AcceptTestSet_LogMessage_Text_First=[\u0627\u0644\u062D\u0627\u0641\u0638] 
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Eighth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+IncrementalClassifierEvaluator_Visual_SetText_Text=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0632\u0627\u064A\u062F\u064A
+PredictionAppender_AcceptClusterer_LogMessage_Text_First=[\u0645\u0636\u064A\u0641 \u0627\u0644\u062A\u0648\u0642\u0639] 
+StripChart_ShowChart_OutputFrame_JFrame_Text=\u0645\u062E\u0637\u0637 \u0627\u0644\u0645\u0633\u0627\u0631
+ClassValuePicker_GlobalInfo_Text=\u062A\u0639\u064A\u064A\u0646 \u0642\u064A\u0645\u0629  \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062A\u064A \u064A\u0645\u0643\u0646 \u0627\u0639\u062A\u0628\u0627\u0631\u0647\u0627 "\u0627\u064A\u062C\u0627\u0628\u064A\u0629"  (\u0645\u0641\u064A\u062F\u0629 \u0644\u0645\u0646\u062D\u0646\u064A\u0627\u062A \u0623\u0633\u0644\u0648\u0628 ROC).
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Third=\u062A\u0646\u0628\u0624
+GraphViewer_DoPopup_Jf_JFrame_Text_Second=\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0644\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+ClassAssignerCustomizer_SetUpColumnSelection_AttributeDEFAULT_Text=(???) 
+CostBenefitAnalysis_PerformRequest_Jf_JFrame_Text=\u062A\u062D\u0644\u064A\u0644  \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629
+Clusterer_AcceptTrainingSet_LogMessage_Text_First_Alpha=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u062C\u0645\u0639.
+FlowRunner_Run_LogMessage_Text_Eleventh=\u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0644\u064A.
+IncrementalClassifierEvaluator_AcceptClassifier_StatusMessage_Text_Second=\u062A\u0645 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629
+FlowRunner_Run_Exception_Text=\u0644\u0627 \u064A\u0628\u062F\u0648 \u0625\u0646\u0647 \u064A\u0648\u062C\u062F \u0623\u064A bean \u064A\u0645\u0643\u0646 \u062A\u0646\u0641\u064A\u0630\u0647\u0627.
+Classifier_SetTrainedClassifier_ErrorMessage_Text_First=\u0645\u0643\u0644\u0629\: \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644
+KnowledgeFlowApp_LoadLayout_LogMessage_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062A\u062F\u0641\u0642 (
+Classifier_SetClassifierTemplate_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+ClassValuePicker_NotifyDataListeners_Text=\u0625\u0639\u0644\u0627\u0645 \u0645\u0633\u062A\u0645\u0639\u064A\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ( \u0645\u0646\u062A\u0642\u064A \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 )
+CostBenefitAnalysis_Cost_ActualA_JLabel_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629 (a)
+Classifier_ConnectionNotification_Msg_Text_First=\u062A\u062D\u0630\u064A\u0631\:   
+ClassAssigner_NotifyTrainingListeners_Error_Text=\u0625\u0639\u0644\u0627\u0645 \u0645\u0633\u062A\u0645\u0639\u064A\u0646 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ( \u0645\u0639\u064A\u0646 \u0627\u0644\u0641\u0626\u0629 )
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A  \u0627\u0644\u062A\u0635\u0641\u064A\u0629\: \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644.
+ClassAssigner_ClassColumnTipText_Text=\u062A\u062D\u062F\u064A\u062F \u0631\u0642\u0645 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0630\u064A \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+ClassifierCustomizer_ExecutionSlotsLabel_JLabel_Text=\u0641\u062A\u062D\u0627\u062A \u0627\u0644\u062A\u0646\u0641\u064A\u0630
+Classifier_AcceptTestSet_Error_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+KnowledgeFlowApp_DoPopup_Name_JOptionPane_ShowInputDialog_Text=\u0623\u062F\u062E\u0644 \u0627\u0633\u0645\u0627 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0643\u0648\u0646
+KnowledgeFlowApp_XMLFilter_Text_First=\ \u0645\u0644\u0641\u0627\u062A \u062A\u062E\u0637\u064A\u0637 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 XML  (*
+LogPanel_Main_StatusMessage_Nineth=\u0627\u0644\u062E\u0637\u0648\u0629 2 $ hashkey | \u062A\u0645 \u0627\u0644\u0642\u0637\u0639 
+Saver_AcceptTestSet_Text_First=... \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 
+AttributeSummarizer_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0645\u0644\u062E\u0635 \u0627\u0644\u0633\u0645\u0627\u062A)
+SaverCustomizer_SetUpFile_PrefixLab_SetText_Text_First=\u0628\u0627\u062F\u0626\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+TextViewer_Visualize_DeleteOutput_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062E\u0632\u0646\u0629
+KnowledgeFlowApp_DoPopup_Edit_MenuItem_Text=\u062A\u0639\u062F\u064A\u0644\:
+Classifier_BinaryFilter_ExtensionFileFilter_Text_Second=)
+ClassAssignerCustomizer_HolderP_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0627\u062E\u062A\u064A\u0627\u0631 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629
+CostBenefitAnalysis_Cost_ActualB_JLabel_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u0629 (b)
+Classifier_SetTrainedClassifier_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+CostBenefitAnalysis_AnalysisPanel_SetClassForConfusionMatrix_Conf_ActualA_SetText_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u0629 (a)\: 
+Loader_NewFileSelected_Text=[\u0627\u0644\u0645\u062D\u0645\u0644] \u0625\u062E\u0628\u0627\u0631 \u0627\u0644\u0645\u0633\u062A\u0645\u0639\u064A\u0646 \u0628\u0623\u0647\u0645\u064A\u0629 \u0647\u064A\u0643\u0644 \u0627\u0644\u062D\u0627\u0644\u0629.
+Classifier_HandleIncrementalEvent_LogMessage_Text_Fourth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+SerializedModelSaver_AcceptClassifier_StatusMessage_Text_Third=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+Clusterer_AcceptTrainingSet_LogMessage_Text=\u0628\u0646\u0627\u0621 \u0645\u062C\u0645\u0648\u0639\u0627\u062A
+KnowledgeFlowApp_SetUpUserToolBar_SetBorder_BorderFactory_CreateTitledBorder_Text=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+CostBenefitAnalysis_AnalysisPanel_SetClassForConfusionMatrix_Conf_ActualB_SetText_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u0629 (b)\:  
+KnowledgeFlowApp_SetUpUserToolBar_AddTab_Text_Third=\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A
+Classifier_AcceptTrainingSet_Msg_Text_Nineth=\u0644\u0644\u062A\u0646\u0641\u064A\u0630...
+Clusterer_AcceptTrainingSet_ModelString_Text_First=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u062C\u0645\u064A\u0639 \=\=\=\n\n\u0627\u0644\u0645\u062E\u0637\u0637\:   
+FlowRunner_Run_Text_Sixth=\u0625\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644  (\u0645\u0648\u0642\u0639 
+Filter_AcceptTestSet_StatusMessage_Text_Fourth=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+FlowRunner_Main_Text=\u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621 \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u062F\u0641\u0642\u0627\u062A.
+ClassifierCustomizer_ClassifierEditor_SetBorder_BorderFactory_CreateTitledBorder_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0635\u0646\u0641
+TrainTestSplitMaker_AcceptDataSet_Run_LogMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+ClassValuePicker_AssignClassValue_StatusMessage_Text_Fourth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+SaverCustomizer_SetUpFile_PrefixText_SetToolTipText_Text=\u0628\u0627\u062F\u0626\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641 ( \u0623\u0648 \u0627\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641 \u0646\u0641\u0633\u0647 \u0625\u0630\u0627 \u0644\u0645 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0633\u0645 \u0627\u0627\u0644\u0639\u0644\u0627\u0642\u0629)
+Filter_AcceptInstance_StatusMessage_Text_Eighth=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644.
+SerializedModelSaver_AcceptClusterer_Message_Text_Third=[\u062D\u0627\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0633\u0644\u0633\u0644\u064A ] 
+Filter_SetWrappedAlgorithm_IllegalArgumentException_Text=\: \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D \u0645\u0646 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629 (\u0627\u0644\u0641\u0644\u062A\u0631)
+CostBenefitAnalysis_Cost_PredictedA_JLabel_Text=\u0645\u062A\u0648\u0642\u0639 (\u0623)
+IncrementalClassifierEvaluator_AcceptClassifier_DataLegend_AddElement_Text_Seventh=RMSE
+LogPanel_Main_StatusMessage_Fifth=\u0627\u0644\u062E\u0637\u0648\u0629 1 | \u0628\u0639\u0636 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A \u0647\u0646\u0627 | \u0627\u0644\u0639\u0648\u062F\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649\!
+KnowledgeFlowApp_InstantiateToolBarBean_Error_Text_Sixth=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u0641\u0634\u0644 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062D\u0627\u0644\u0629 \:
+Classifier_ConnectionNotification_LogMessage_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+ClassifierPerformanceEvaluator_AcceptClassifier_HtmlTitle_Text_First=<html><font size-2>
+Clusterer_AcceptTrainingSet_StatusMessage_Text_First=\u062E\u0637\u0623 ( \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 \u0627\u0644\u0633\u062C\u0644 \u0644\u0644\u062A\u0641\u0627\u0635\u064A\u0644)
+KnowledgeFlowApp_LoadProperties_Text_Third=\u0625\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0641\u0626\u0629...
+KnowledgeFlowApp_InstallWindowListenerForSavingUserBeans_Error_Text_First=[ \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629] \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u0646\u0634\u0627\u0621. \u062F\u0644\u064A\u0644  \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0645\u0646\u0632\u0644\u0643.
+ModelPerformanceChart_PerformRequest_IllegalArgumentException_Text=\ \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645  (\u0645\u062E\u0637\u0637 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0623\u062F\u0627\u0621)
+Classifier_AcceptTestSet_Msg_Text_First=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Classifier_HandleIncrementalEvent_StatusMessage_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0642\u0628\u0648\u0644 \u0627\u0644\u062D\u0627\u0644\u0629 -\u064A\u062A\u0645 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u062F\u0641\u0639\u0627\u062A.
+CostBenefitAnalysis_AnalysisPanel_ConstructCostBenefitData_CostBenefit_SetPlotName_Text=\u0645\u0646\u062D\u0646\u0649 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629 
+Classifier_TrainingTask_Execute_TitleString_Text_Sixth=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+Filter_AcceptInstance_LogMessage_Text_Sixth=[\u0627\u0644\u0641\u0644\u062A\u0631] 
+TrainTestSplitMakerCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0645\u0643\u0648\u0646 \u0623\u0642\u0633\u0627\u0645  \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+KnowledgeFlowApp_KOMLFilter_Text_First=kf
+ModelPerformanceChart_AcceptDataSet_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A  \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u064A\u0631 (\u0645\u062E\u0637\u0637 \u0623\u062F\u0627\u0621 \u0627\u0644\u0646\u0645\u0648\u0630\u062C)
+Filter_ProcessTrainingOrDataSourceEvents_StatusMessage_Text_Sixth=\u062A\u0645 \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621.
+CrossValidationFoldMakerCustomizer_JLabel_Text=\u0645\u062E\u0635\u0635 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0645\u0643\u0648\u0646 \u0627\u0644\u0623\u0636\u0627\u0639\u0641
+Classifier_ConnectionNotification_JOptionPane_ShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+Classifier_ConnectionNotification_LogMessage_Text_Second=[\u0627\u0644\u0645\u0635\u0646\u0641] 
+CostBenefitAnalysis_AnalysisPanel_CostBenefitL_SetText_Text_Second=\u0627\u0644\u0645\u0646\u0641\u0639\u0629\: 
+CostBenefitAnalysis_AnalysisPanel_CbHolder_TempP_JPanel_Add_JLabel_Text_First=\u0628\u0634\u0643\u0644 \u0639\u0634\u0648\u0627\u0626\u064A\: 
+TextViewer_Main_TextEvent_Text_First=\u0648\u0647\u0646\u0627 \u0628\u0639\u0636 \u0627\u0644\u0646\u0635\u0648\u0635 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0645\u0646 \u0627\u0644\u0623\u0633\u0644\u0648\u0628 \u0627\u0644\u0631\u0626\u064A\u0633\u064A \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 .
+Loader_LoadThread_StatusMessage_Text_Eighth=[\u0627\u0644\u0645\u062D\u0645\u0644] 
+CostBenefitAnalysis_Conf_PredictedA_JLabel_Text=\u0645\u062A\u0648\u0642\u0639 (\u0623)
+KnowledgeFlowApp_CheckSubFlow_Result_Name_ShowConfirmDialog_Text_Second=\u0645\u062C\u0645\u0648\u0639\u062A\u064A
+CostBenefitAnalysis_Cost_PredictedB_JLabel_Text=\u0645\u062A\u0648\u0642\u0639 (\u0628)
diff --git a/src/main/java/weka/gui/beans/xml/messages/messages_ar.properties b/src/main/java/weka/gui/beans/xml/messages/messages_ar.properties
new file mode 100644
index 0000000..4af5bc8
--- /dev/null
+++ b/src/main/java/weka/gui/beans/xml/messages/messages_ar.properties
@@ -0,0 +1,42 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+XMLBeans_ReadFont_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadMetaBean_Input_Text_End=' \u0633\u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u062A\u0647\u0627 \u0644\u0627\u062D\u0642\u0627.
+XMLBeans_ReadPoint_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadFontUIResource_Text_Third=\!
+XMLBeans_SetDataType_DataType_Text_Front=\u0646\u0648\u0639 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A '
+XMLBeans_ReadColorUIResource_Text_Third=\!
+XMLBeans_WriteLoader_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u0641\u0626\u0629 \u0645\u062D\u0645\u0644 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\u0629
+XMLBeans_ReadBeanInstance_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadColor_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadFont_Text_Third=\!
+XMLBeans_ReadDimension_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_SetDataType_AddBeanInstances_Text_Front=addBeanInstances \u0644\u0627 \u064A\u062F\u0639\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0641\u0626\u0627\u062A '
+XMLBeans_ReadPoint_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadPoint_Text_Third=\!
+XMLBeans_WriteLoader_Text_Second=' - \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0627\u0633\u062A\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u0644\u0641 \!
+XMLBeans_ReadColor_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadMetaBean_Output_Text_Front=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
+XMLBeans_ReadFont_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadMetaBean_Output_Text_End=' \u0633\u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u062A\u0647\u0627 \u0644\u0627\u062D\u0642\u0627.
+XMLBeans_WriteSaver_Text_End=' - \u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0627\u0633\u062A\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u0644\u0641 \!
+XMLBeans_ReadBeanInstance_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadBeanConnection_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadDimension_Text_Third=\!
+XMLBeans_ReadLoader_Text_End=' \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \!
+XMLBeans_ReadColor_Text_Third=\!
+XMLBeans_ReadFontUIResource_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_SetDataType_DataType_Text_End=' \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\!
+XMLBeans_WritePreProcess_Text_End=' \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\!
+XMLBeans_ReadBeanConnection_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadDimension_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_WriteSaver_Text_Front=\u062A\u062D\u0630\u064A\u0631\: \u0641\u0626\u0629 \u0627\u0644\u0645\u062E\u0632\u0646 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\u0629 '
+XMLBeans_ReadBeanInstance_Text_Third=\!
+XMLBeans_ReadBeanConnection_Text_Third=\!
+XMLBeans_WritePreProcess_Text_Front=writePreProcess\: \u0646\u0648\u0639 \u0627\u0644\u0628\u064A\u0627\u0646\u062A '
+XMLBeans_ReadFontUIResource_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadColorUIResource_Text_Second=' \u0627\u0633\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0640
+XMLBeans_ReadColorUIResource_Text_First=\u062A\u062D\u0630\u064A\u0631\: '
+XMLBeans_ReadLoader_Text_Front=\u062A\u062D\u0630\u064A\u0631\: \u0627\u0644\u0645\u0644\u0641 '
+XMLBeans_SetDataType_AddBeanInstances_Text_End='
+XMLBeans_ReadMetaBean_Input_Text_Front=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
diff --git a/src/main/java/weka/gui/boundaryvisualizer/messages/messages_ar.properties b/src/main/java/weka/gui/boundaryvisualizer/messages/messages_ar.properties
new file mode 100644
index 0000000..b5138e5
--- /dev/null
+++ b/src/main/java/weka/gui/boundaryvisualizer/messages/messages_ar.properties
@@ -0,0 +1,128 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+BoundaryPanelDistributed_LaunchNext_Run_UnitsHours_Text=\u0633\u0627\u0639\u0627\u062A
+BoundaryPanelDistributed_Start_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+RemoteBoundaryVisualizerSubTask_Execute_StatusMessage_Text_End=\u062A\u0645 \u0627\u0644\u0646\u062A\u0647\u0627\u0621 \u0628\u0646\u062C\u0627\u062D.
+BoundaryVisualizer_ComputeBounds_JOptionPaneShowMessageDialog_Text=\u0646\u062D\u0646 \u0628\u062D\u0627\u062C\u0629 \u0627\u0644\u0649 \u0633\u0645\u062A\u064A\u0646 \u0631\u0642\u0645\u064A\u062A\u064A\u0646 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u062A\u0635\u0648\u064A\u0631\!
+BoundaryPanelDistributed_Start_Error_Text_Second=\u0644\u0627\u064A\u0648\u062C\u062F  \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0644\u0645\u0635\u0646\u0641 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanelDistributed_LaunchNext_Run_StartingRow_Text_Front=\u0633\u0637\u0631 \u0627\u0644\u0628\u062F\u0627\u064A\u0629 
+BoundaryPanelDistributed_LaunchNext_Run_Error_Connection_Text_Second=\u0641\u0634\u0644. \u062C\u062F\u0648\u0644\u062A \u0627\u0644\u0633\u0637\u0631
+BoundaryPanel_Start_Error_NoDataGeneratorSet_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanel_AddTrainingInstance_Error_Text=\u0645\u062D\u0627\u0648\u0644\u0629 \u0625\u0636\u0627\u0641\u0629 \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0641\u0627\u0631\u063A\u0629 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645)
+BoundaryPanel_SetYAttribute_Error_Text_Third=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u0631 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryPanelDistributed_AvailableHost_PlottingAborted_AllConnection_Text=\u062A\u0645 \u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062E\u0637\u064A\u0637\! \u062C\u0645\u064A\u0639 \u0627\u0644\u0627\u062A\u0635\u0627\u0644\u062A \u0645\u0639 \u0627\u0644\u0645\u0636\u064A\u0641 \u0627\u0644\u0628\u0639\u064A\u062F \u0641\u0634\u0644\u062A
+BoundaryVisualizer_SetLayout_Error_Text=\u0647\u0646\u0629 \u0641\u064A  \u0627\u0644\u0641\u0626\u0629 \u0639\u0646\u062F \u0635\u0646\u062F\u0648\u0642 \u0627\u0644\u0627\u0633\u062A\u0645\u0627\u0639 
+BoundaryPanelDistributed_Main_Error_LoadingInstances_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646\:
+BoundaryPanel_SetXAttribute_Error_Text_Second=\u0627\u0644\u0645\u0624\u0634\u0631 x \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryVisualizer_SetInstances_AttributeRELATIONAL_Text=(\u0631\u0642\u0645)
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_JOptionPaneShowMessageDialog_Text_Second=\u062E\u0637\u0623\: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0646\u0648\u0627\u0629 \u0639\u0631\u0636 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u062A\u0631\u062F\u062F\u064A \u0623\u0642\u0644 \u0645\u0646 \u0639\u062F\u062F \u0645\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628\!
+BoundaryVisualizer_ComputeBounds_XName_Substring_Text_Second=(Num)
+BoundaryVisualizer_GetTechnicalInformation_FieldPUBLISHER=
+BoundaryPanelDistributed_LaunchNext_Run_RemoteHost_Text_Front=/ /
+BoundaryPanelDistributed_Initialize_Error_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u062F\u064A\u062F \u0645\u0636\u064A\u0641 \!
+BoundaryPanelDistributed_AvailableHost_MaxFailuresExceededForHost_Text_End=.  \u0627\u0632\u064A\u0644\u062A \u0645\u0646 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0636\u064A\u0641.
+RemoteBoundaryVisualizerSubTask_Execute_StatusMessage_Text_Front=\u0633\u0637\u0631 
+BoundaryPanel_GetToolTipText_Text_Third=) 
+BoundaryVisualizer_Main_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646\:
+BoundaryVisualizer_RsP_JPanel_Text=\u0627\u0644\u0631\u0642\u0645 . \u0645\u0648\u0627\u0642\u0639 \u0644\u0643\u0644 \u0628\u0643\u0633\u0644
+BoundaryPanel_PlotThread_JOptionPaneShowMessageDialog_Text_Front=\u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062E\u0637\u064A\u0637\:  "
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_Text_End=) 
+BoundaryPanelDistributed_LaunchNext_Run_SchedulingRow_Text_End=\u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0644\u0644\u062A\u0646\u0641\u064A\u0630 \u0639\u0644\u0649 \u0645\u0636\u064A\u0641 \u0622\u062E\u0631.
+BoundaryVisualizer_DataChooseHolder_JPanel_Text=\u0627\u0644\u0628\u064A\u0646\u0627\u062A.
+BoundaryVisualizer_SetInstances_AttributeNUMERIC_Text=(Num)
+BoundaryVisualizer_GlobalInfo_Text=\u0641\u0626\u0629 \u0644\u062A\u0645\u064A\u0644 \u062A\u0642\u062F\u064A\u0631\u0627\u062A \u0641\u0626\u0629 \u0627\u0644\u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A.\n\n\u0644\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0646\u0638\u0631 \u0625\u0644\u0649 
+BoundaryPanel_SetYAttribute_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryVisualizer_SetInstances_AttributeSTRING_Text=(\u0623\u062D\u0631\u0641)
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_RowQueue_Text_Front=\u0633\u0637\u0631 
+BoundaryVisualizer_ClassHolder_JPanel_Text=\u0644\u0648\u0646 \u0627\u0644\u0641\u0626\u0629
+BoundaryPanelDistributed_LaunchNext_Run_StartingRow_Text_End=\u0641\u064A \u0627\u0644\u0645\u0636\u064A\u0641 
+BoundaryPanelDistributed_Main_Error_Text_Second=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0644\u0641 hosts.vis - \n\u0625\u0646\u0634\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641 \u0641\u064A \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u062D\u0627\u0644\u064A \u0645\u0639 \u0627\u0633\u0645 \u0645\u0636\u064A\u0641 \u0648\u0627\u062D\u062F \u0641\u064A \u0643\u0644 \u0633\u0637\u0631\u060C \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u0648\u06 [...]
+BoundaryVisualizer_ComputeBounds_XName_Substring_Text_First=X\:
+BoundaryPanel_GetToolTipText_Text_First=(X\: 
+BoundaryVisualizer_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ARFF
+BoundaryPanelDistributed_LaunchNext_Run_UnitsMinutes_Text=\u062F\u0642\u0627\u0626\u0642
+BoundaryPanelDistributed_AvailableHost_MaxFailuresExceededForHost_Text_Front=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u0644\u0641\u0634\u0644 \u062A\u062C\u0627\u0648\u0632 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0636\u064A\u0641
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_StartBut_Text_Stop_Second=\u062A\u0648\u0642\u0641
+BoundaryVisualizer_ColTwo_JPanel_Text=\u0642\u0627\u0639\u062F\u0629 \u0644\u0623\u062E\u0630 \u0627\u0644\u0639\u064A\u0646\u0627\u062A ( r )
+BoundaryPanelDistributed_Main_Error_NoColorMapFile_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0644\u0641 \u0644\u062E\u0627\u0631\u0637\u0629 \u0627\u0644\u0623\u0627\u0648\u0627\u0646
+BoundaryPanel_SetYAttribute_Error_Text_Second=\u0627\u0644\u0645\u0624\u0634\u0631 y \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryVisualizer_GetTechnicalInformation_FieldADDRESS=
+BoundaryVisualizer_ComputeBounds_YAttNames_Text=Y\: 
+BoundaryPanelDistributed_LaunchNext_Run_SchedulingRow_Text_Front=\u0633\u0637\u0631 
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_StartBut_Text_Stop_First=\u062A\u0648\u0642\u0641
+BoundaryPanel_GetToolTipText_Text_Second=Y\: 
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_Row_Text_Second=% \u0645\u0646\u062A\u0647\u064A 
+BoundaryPanelDistributed_LaunchNext_Run_RemoteHost_Text_End=/ \u0627\u0644\u0645\u062D\u0631\u0643 \u0639\u0646 \u0628\u0639\u062F 
+BoundaryVisualizer_RemoveAll_JButton_Text=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u062C\u0645\u064A\u0639
+BoundaryVisualizer_SetInstances_AttributeDEFAULT_Text=(???) 
+RemoteBoundaryVisualizerSubTask_Execute_TrainingData_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_RowQueue_Text_End=\u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 \u0639\u0644\u0649 
+RemoteBoundaryVisualizerSubTask_Execute_TrainingData_Error_Text_Second=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u0631 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 (RemoteBoundaryVisualizerSubTask)
+BoundaryVisualizer_BoundaryPanel_MouseClicked_JOptionPaneShowMessageDialog_Text_Third=\u0627\u0644\u0642\u064A\u0645\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\u0629 \u0644\u0644\u0641\u0626\u0629.
+BoundaryVisualizer_GetTechnicalInformation_FieldTITLE=
+BoundaryVisualizer_TempPanel_JPanel_Text=\u0627\u0644\u062A\u062D\u0643\u0645 \u0628\u0627\u0644\u0639\u064A\u0646\u0627\u062A
+BoundaryVisualizer_GetTechnicalInformation_FieldPAGES=
+BoundaryPanelDistributed_AvailableHost_PlottingAborted_AllRemoteTasks_Text=.\u062A\u0645 \u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062E\u0637\u064A\u0637. \u062C\u0645\u064A\u0639 \u0627\u0627\u0644\u0645\u0647\u0627\u0645 \u0627\u0644\u0628\u0639\u064A\u062F\u0629 \u0625\u0646\u062A\u0647\u062A
+BoundaryPanel_SetXAttribute_Error_Text_Third=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u0631 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623\: \u0646\u0648\u0627\u0629 \u0639\u0631\u0636 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u062A\u0631\u062F\u062F\u064A \u0644\u0627 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0623\u0642\u0644 \u0645\u0646 \u0627\u0644\u0635\u0641\u0631\!
+RemoteBoundaryVisualizerSubTask_Execute_StatusMessage_Text_Front_First=\u0633\u0637\u0631 
+BoundaryVisualizer_PlotTrainingData_JCheckBox_Text=\u062A\u062E\u0637\u064A\u0637 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 
+BoundaryVisualizer_GetTechnicalInformation_FieldAUTHOR=\u0625\u064A\u0628\u064A \u0641\u0631\u0627\u0646\u0643 \u0648\u0645\u0627\u0631\u0643 \u0647\u0648\u0644 
+BoundaryVisualizer_AddRemovePointsPanel_NewWindowButton_JButton_Text=\u0641\u062A\u062D \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629
+BoundaryVisualizer_Choose_JButton_Text=\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0641
+BoundaryVisualizer_ComputeBounds_XAttNames_Text=X\: 
+RemoteBoundaryVisualizerSubTask_Execute_StatusMessage_Text_End_First=\u0641\u0634\u0644.
+BoundaryPanelDistributed_Main_Error_Text_First_Alpha=\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0636\u064A\u0641
+BoundaryVisualizer_GetTechnicalInformation_FieldBOOKTITLE=
+BoundaryPanelDistributed_LaunchNext_Run_Error_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u062C\u0632\u0626\u064A\u0629 \u062A\u0645 \u0642\u0637\u0639\u0647\u0627\!
+BoundaryVisualizer_BoundaryPanel_MouseClicked_StartBut_Stop_Text=\u062A\u0648\u0642\u0641
+BoundaryVisualizer_GetTechnicalInformation_FieldYEAR=
+BoundaryVisualizer_BoundaryPanel_MouseClicked_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0625\u0636\u0627\u0641\u0629 \u0646\u0642\u0637\u0629\:  "
+BoundaryPanel_Main_Title_JFrame_Text=\u0648\u064A\u0643\u0627 \u062A\u0635\u0646\u064A\u0641 \u062D\u062F\u0648\u062F \u0627\u0644\u0645\u0635\u0648\u0631
+BoundaryVisualizer_Start_JButton_Text=\u0625\u0628\u062F\u0623
+BoundaryPanelDistributed_Start_Error_Text_Fourth=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u0631 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryPanel_Main_Error_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646\:
+BoundaryPanel_SetXAttribute_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryVisualizer_ClassifierHolder_JPanel_Text=\u0627\u0644\u0645\u0635\u0646\u0641
+BoundaryPanel_PlotThread_JOptionPaneShowMessageDialog_Text_End=\ "
+BoundaryVisualizer_KsP_JPanel_Text=\u0639\u0631\u0636 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u062A\u0631\u062F\u062F\u064A \u0646\u0648\u0627\u0629 (\u0643)
+BoundaryVisualizer_SetInstances_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+KDDataGenerator_UpdateMinMax_Error_Text=\u062C\u0645\u064A\u0639 \u062D\u0627\u0644\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0645\u062A\u0632\u0627\u0645\u0646\u0629 \u0645\u0639 \u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\!
+BoundaryVisualizer_AddRemovePointsPanel_JLabel_Text_First=\u0625\u0636\u0627\u0641\u0629 \u0646\u0642\u0627\u0637
+BoundaryVisualizer_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_First=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+RemoteBoundaryVisualizerSubTask_Execute_Classifier_Error_Text=\u0644\u0627\u064A\u0648\u062C\u062F  \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0644\u0645\u0635\u0646\u0641 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanel_SaveImage_Error_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0643\u0627\u062A\u0628 \u0645\u062A\u0627\u062D \u0644\u0646\u0648\u0639  JPEG  \!
+RemoteBoundaryVisualizerSubTask_Execute_Error_Text=\u062A\u0646\u0641\u064A\u062F \u0633\u0637\u0631 \u0631\u0642\u0645 
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_Row_Text_Third=.
+BoundaryPanelDistributed_AvailableHost_PlottingAborted_MaxFailure_Text=\u062A\u0645 \u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062E\u0637\u064A\u0637\! \u062A\u0645 \u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u0644\u062E\u0637\u0627 \u0645\u0639 \u0627\u0644\u0645\u0636\u064A\u0641 \u0627\u0644\u0628\u0639\u064A\u062F\u061F
+BoundaryVisualizer_AddRemovePointsPanel_JLabel_Text_Second=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637
+BoundaryPanel_Start_Error_VisualizationDimensionsMustBeNumeric_Text=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u0631 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F)
+BoundaryPanelDistributed_LaunchNext_Run_Error_Connection_Text_Third=\u0644\u0644\u062A\u0646\u0641\u064A\u0630 \u0639\u0644\u0649 \u0645\u0636\u064A\u0641 \u0622\u062E\u0631 .
+BoundaryPanel_Main_Error_Text_Third=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0644\u0641 \u0644\u062E\u0627\u0631\u0637\u0629 \u0627\u0644\u0623\u0627\u0648\u0627\u0646
+BoundaryVisualizer_VAttHolder_JPanel_Text=\u0633\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u0648\u0631
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_StartBut_Text_Start_Third=\u0625\u0628\u062F\u0623
+BoundaryVisualizer_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_Text_Front=( \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062A\u0642\u0631\u064A\u0628 \u0627\u0644\u0645\u062A\u0628\u0642\u064A
+BoundaryVisualizer_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u062D\u0627\u0644\u064A\u0627, \n\u0645\u0634\u063A\u0648\u0644 \u062D\u0627\u0644\u064A\u0627 \u0641\u064A \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649.\n
+BoundaryVisualizer_SetInstances_AttributeNOMINAL_Text=(\u0631\u0645\u0632)
+BoundaryPanel_Start_Error_NoTrainingDataSet_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryVisualizer_CHolder_JPanel_Text=\u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 
+BoundaryVisualizer_ComputeBounds_YName_Substring_Text_Second=(Num)
+BoundaryPanelDistributed_LaunchNext_Run_TimeRemaining_Row_Text_First=\u0633\u0637\u0631 
+RemoteBoundaryVisualizerSubTask_Execute_DataGenerator_Error_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanelDistributed_LaunchNext_Run_Error_Connection_Text_First=\u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0628\u0640 
+BoundaryPanel_Main_Error_Text_First=Usage \: BoundaryPanel <dataset> <class col> <xAtt> <yAtt> <base> <\# loc/pixel> <kernel bandwidth> <display width> <display height> <classifier [classifier options]>"
+BoundaryPanelDistributed_AvailableHost_PlottingCompleted_Text=\u062A\u0645 \u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0628\u0646\u062C\u0627\u062D.
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_StartBut_Text_Start_Second=\u0625\u0628\u062F\u0623
+BoundaryVisualizer_AddRemovePointsPanel_ActionPerformed_StartBut_Text_Start_First=\u0625\u0628\u062F\u0623
+BoundaryPanelDistributed_Main_Error_Text_First=Usage \: BoundaryPanelDistributed <dataset> <class col> <xAtt> <yAtt> <base> <\# loc/pixel> <kernel bandwidth> <display width> <display height> <classifier [classifier options]>
+BoundaryPanelDistributed_Start_Error_Text_Third=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryPanelDistributed_LaunchNext_Run_UnitsSeconds_Text=\u062B\u0648\u0627\u0646\u064A
+BoundaryPanel_SetTrainingData_Error_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0641\u0626\u0629  (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
+BoundaryVisualizer_BoundaryPanel_MouseClicked_JOptionPaneShowMessageDialog_Text_Second=\ "
+BoundaryVisualizer_StartPanel_JPanel_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637
+BoundaryVisualizer_AddRemovePointsPanel_JPanel_Text=\u0625\u0636\u0627\u0641\u0629 / \u0625\u0632\u0627\u0644\u0629 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+BoundaryPanelDistributed_Main_JFrame_Title_Text=\u0648\u064A\u0643\u0627 \u062A\u0635\u0646\u064A\u0641 \u062D\u062F\u0648\u062F \u0627\u0644\u0645\u0635\u0648\u0631
+BoundaryVisualizer_ComputeBounds_YName_Substring_Text_First=Y\:
+BoundaryVisualizer_CreateNewVisualizerWindow_Title_Text=\u0648\u064A\u0643\u0627 \u062A\u0635\u0646\u064A\u0641 \u062D\u062F\u0648\u062F \u0627\u0644\u0645\u0635\u0648\u0631
+BoundaryPanel_Start_Error_NoClassifierSet_Text=\u0644\u0627\u064A\u0648\u062C\u062F  \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0644\u0645\u0635\u0646\u0641 (\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u062F\u0648\u062F )
diff --git a/src/main/java/weka/gui/experiment/messages/messages_ar.properties b/src/main/java/weka/gui/experiment/messages/messages_ar.properties
new file mode 100644
index 0000000..a4f7d39
--- /dev/null
+++ b/src/main/java/weka/gui/experiment/messages/messages_ar.properties
@@ -0,0 +1,290 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+DatasetListPanel_Main_Error_Text_First=\u0642\u064A\u0644\u0648\u0644\u0629 \u0642\u0635\u064A\u0631\u0629
+ResultsPanel_Lab_JLabel_Text_Second=\u0623\u0647\u0645\u064A\u0629
+GeneratorPropertyIteratorPanel_Main_Error_Text_Second=\u062A\u0645
+OutputFormatDialog_OkButton_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+SetupModePanel_SwitchPanel_JPanel_Text=\u0648\u0636\u0639 \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629\:
+ResultsPanel_Lab_JLabel_Text_Fourth=\u0642\u0627\u0639\u062F\u0629 \u0627\u062E\u062A\u0628\u0627\u0631
+ResultsPanel_FromDBaseBut_JButton_Text=\u0642\u0627\u0639\u062F\u0629 \u0628\u064A\u0627\u0646\u0627\u062A ...
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Fourth=\u0644\u0627  \u064A\u0648\u062C\u062F \u062A\u062C\u0627\u0631\u0628 \u0645\u062A\u0627\u062D\u0629
+RunPanel_ExperimentRunner_ActionPerformed_LogMessage_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0646\u0633\u062E\u0629  \u0645\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0644\u062A\u0634\u063A\u064A\u0644\:
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Seventh_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+RunPanel_ExperimentRunner_Main_Error_Text_First=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\: \n
+SetupPanel_Main_Error_Text_Second=\u0642\u064A\u0644\u0648\u0644\u0629 \u0642\u0635\u064A\u0631\u0629
+SetupPanel_AdvanceDataSetFirst_SetToolTipText_Text=\u062A\u0642\u062F\u064A\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0645\u062E\u0635\u0635
+DistributeExperimentPanel_ConfigureHostNames_JButton_Text=\u0627\u0644\u0645\u0636\u064A\u0641\u064A\u0646
+SimpleSetupPanel_SetExperiment_UnrecognisedResultListener_Text=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0645\u0643\u0627\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+GeneratorPropertyIteratorPanel_SelectProperty_Error_Text_Third=\u0623\u0644\u063A\u064A
+Experimenter_TabbedPane_Run_Value_Text=\u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+AlgorithmListPanel_SaveOptionsBut_JButton_Text=\u062D\u0641\u0638 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A ...
+AlgorithmListPanel_JOptionPaneShowInputDialog_Text=\u0627\u0644\u062A\u0643\u0648\u064A\u0646 ( <classname> [ <options> ] )
+SetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_Third=\u062D\u0641\u0638 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+ResultsPanel_SetInstances_FromLab_Text_Second=\u0627\u0644\u0646\u062A\u0627\u0626\u062C
+ResultsPanel_Lab_JLabel_Text_First=\u0645\u062C\u0627\u0644 \u0627\u0644\u0645\u0642\u0627\u0631\u0646\u0629
+SetupPanel_Dest_JPane_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0645\u0643\u0627\u0646 \u0627\u0644\u0645\u0642\u0635\u0648\u062F
+SetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_Second=\n \u0627\u0644\u0633\u0628\u0628\: \n
+RunPanel_NOT_RUNNING_Text=\u0644\u0627 \u062A\u0639\u0645\u0644
+ResultsPanel_Lab_JLabel_Text_Fifth=\u0627\u0644\u0623\u0639\u0645\u062F\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629
+RunPanel_ExperimentRunner_Main_Exception_Text=\u064A\u062C\u0628 \u0625\u0639\u0637\u0627\u0621 \u0627\u0633\u0645 \u0645\u0644\u0641 \u0645\u0639 -F \u0627\u0644\u062E\u064A\u0627\u0631
+ResultsPanel_DatasetKeyLabel_JButton_Text=\u0633\u0637\u0631 
+GeneratorPropertyIteratorPanel_Main_JFrame_Text=\u0645\u0648\u0644\u062F \u0645\u0643\u0631\u0631 \u0627\u0644\u062E\u0627\u0635\u064A\u0629
+SimpleSetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_Second=\n \u0627\u0644\u0633\u0628\u0628\: \n
+SetupPanel_ExpFilter_ExtensionFileFilter_Text_Second=)
+SimpleSetupPanel_DestinationTypeChanged_DEST_DATABASE_TEXT_ResultsDestinationPathLabel_Text_First=\u0627\u0644\u0631\u0627\u0628\u0637\:
+Experimenter_TabbedPane_Setup_Value_Text=\u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+ExperimenterDefaults_Main_Text=\n\u0625\u0641\u062A\u0631\u0627\u0636\u064A\u0627\u062A \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+SimpleSetupPanel_DestinationTypeChanged_DEST_DATABASE_TEXT_ResultsDestinationPathLabel_Text_Second=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_Second=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0639\u0644\u0649 \u0623\u0646\u0647 ' 
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Third=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+AlgorithmListPanel_DeleteBut_JButton_Text=\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u062F\u062F
+Experimenter_Main_Error_Text_First=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+AlgorithmListPanel_AddBut_JButton_Text=\u0625\u0636\u0627\u0641\u0629 \u062C\u062F\u064A\u062F\u0629 ...
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_Fourth=\u0627\u0644\u0633\u0628\u0628\: \n
+DistributeExperimentPanel_EnableDistributedExperiment_SetToolTipText_Text=\u0627\u0644\u0633\u0645\u0627\u062D \u0644\u0647\u0630\u0647 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0644\u064A\u062A\u0645 \u062A\u0648\u0632\u064A\u0639\u0647\u0627  \u0644\u0644\u0623\u062C\u0647\u0632\u0629 \u0627\u0644\u0628\u0639\u064A\u062F\u0629
+SimpleSetupPanel_ExpClassificationRBut_JRadioButton_Text=\u0627\u0644\u062A\u0635\u0646\u064A\u0641
+AlgorithmListPanel_Main_Error_Text_Second=\u062A\u0645
+DatasetListPanel_RelativeCheck_SetBorder_Text=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+RunNumberPanel_B2_JLabel_Text=\u0625\u0644\u0649\:
+OutputFormatDialog_Title_Text=\u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A ...
+OutputFormatDialog_CreateDialog_RemoveFilterClassnames_JLabel_Text=\u0625\u0632\u0627\u0644\u0629 \u0645\u0635\u0641\u064A \u0627\u0633\u0645\u0627\u0621 \u0627\u0644\u0641\u0626\u0627\u062A 
+ResultsPanel_DisplayedButton_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+DistributeExperimentPanel_SetBorder_BorderFactoryCreateTitledBorder_Text=\u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+DatasetListPanel_ActionPerformed_Result_JOptionPaneShowConfirmDialog_Text=\u0627\u0644\u0645\u0644\u0641 \u0645\u0639\u062F\u0644 \u0647\u0644 \u062A\u0631\u063A\u0628 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u062A\u063A\u064A\u064A\u0631\u0627\u062A \u00D8\u009F
+SimpleSetupPanel_OpenBut_JButton_Text=\u0641\u062A\u062D...    
+SimpleSetupPanel_NewBut_JButton_Text=\u062C\u062F\u064A\u062F
+SimpleSetupPanel_OrderDatasetsFirstRBut_JRadioButton_Text=\u0623\u0648\u0644\u0627 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A 
+AlgorithmListPanel_ActionPerformed_Error_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0644\u064A\u0644 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \n
+SetupPanel_KOMLFilter_ExtensionFileFilter_Text_Second=)
+SimpleSetupPanel_ExpFilter_ExtensionFileFilter_Text_Second=)
+DistributeExperimentPanel_SplitByDataSet_JRadioButton_Text=\u0628\u0648\u0627\u0633\u0637\u0629 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+SimpleSetupPanel_Type_JPanel_BorderFactoryCreateTitledBorder_Text=\u0646\u0648\u0639 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+SimpleSetupPanel_DestinationTypeChanged_DEST_DATABASE_TEXT_BrowseDestinationButton_Text=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 ...
+ResultsPanel_SetInstancesFromDBaseQuery_Error_Text_Second=\u0623\u0633\u0633
+GeneratorPropertyIteratorPanel_ConfigureBut_JButton_Text=\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u062E\u0627\u0635\u064A\u0629 ...
+RunNumberPanel_UpperText_JTextField_Text=10
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Seventh_Second='
+ResultsPanel_SetInstancesFromDatabaseTable_FromLab_Text=\u062A\u062A\u0645 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\u060C \u064A\u0631\u062C\u0649 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 ...
+SimpleSetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0641\u062A\u062D \u0645\u0644\u0641 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \: \n
+SimpleSetupPanel_UserWantsToConvert_JOptionPaneShowConfirmDialog_Text_First=\u0647\u0630\u0647 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0625\u0639\u062F\u0627\u062A \u0645\u062A\u0642\u062F\u0645\u0629 \u0633\u064A\u062A\u0645 \u062E\u0633\u0631\u0627\u0646\u0647\u0627 \u0641\u064A \u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0628\u0633\u064A\u0637.\n\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u0627\u0 [...]
+AlgorithmListPanel_LoadOptionsBut_JButton_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u062D\u0645\u064A\u0644 ...
+SimpleSetupPanel_DestinationTypeChanged_DEST_ARFF_TEXT_BrowseDestinationButton_Text=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 ...
+SetupPanel_OpenExperiment_Error_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629\: \n 
+RunNumberPanel_SetBorder_BorderFactoryCreateTitledBorder_Text=\u064A\u062F\u064A\u0631
+RunPanel_ExperimentRunner_ActionPerformed_LogMessage_Text_Third=\u0641\u064A \u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u0645\u0647\u0627\u0645 \u0639\u0646 \u0628\u0639\u062F \u0644\u0627\u0633\u062A\u0643\u0645\u0627\u0644 ...
+SimpleSetupPanel_ResultsDestinationPathLabel_JLabel_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+SetupPanel_Main_JFrame_Text=\u0625\u0639\u062F\u0627\u062F \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_Sixth=\u0645\u0648\u0627\u0641\u0642
+SimpleSetupPanel_DEST_DATABASE_TEXT_Text=\u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A JDBC
+HostListPanel_Main_JFrame_Text=\u0642\u0627\u0626\u0645\u0629 \u0645\u062D\u0631\u0631 \u0627\u0644\u0645\u0636\u064A\u0641
+RunPanel_ExperimentRunner_Run_StatusMessage_Text_First=\u062A\u0647\u064A\u0626\u0629 ...
+AlgorithmListPanel_Error_JOptionPaneShowMessageDialog_Text_End=\u062E\u0637\u0623 ...
+OutputFormatDialog_CancelButton_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+SimpleSetupPanel_ExperimentParameterLabel_JLabel_Text=\u0639\u062F\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \:
+ResultsPanel_TesterClassesLabel_JButton_Text=\u0627\u062E\u062A\u0628\u0627\u0631 \u0645\u0639
+AlgorithmListPanel_Item_JMenuItem_Text_Second=\u0625\u0638\u0647\u0627\u0631  \u0627\u0644\u062E\u0635\u0627\u0626\u0635 ...
+ResultsPanel_Lab_JLabel_Text_Third=\u062A\u0631\u062A\u064A\u0628  (\u062A\u0635\u0627\u0639\u062F\u064A) \u0628\u0646\u0627\u0621\u0627 \u0639\u0644\u0649
+SetupPanel_Main_Error_Text_First=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\: \n
+OutputFormatDialog_CreateDialog_ShowAverage_JLabel_Text=\u0645\u0634\u0627\u0647\u062F\u0629 \u0627\u0644\u0645\u062A\u0648\u0633\u0637
+AlgorithmListPanel_Item_JMenuItem_Text_Fourth=\u0623\u062F\u062E\u0644 \u0627\u0644\u062A\u0643\u0648\u064A\u0646 ...
+RunPanel_StopBut_JButton_Text=\u062A\u0648\u0642\u0641
+SetupPanel_Src_JPane_BorderFactoryCreateTitledBorder_Text=\u0645\u0648\u0644\u062F \u0627\u0644\u0646\u062A\u064A\u062C\u0629
+SimpleSetupPanel_ExpTypeChanged_TYPE_FIXEDSPLIT_TEXT_NumberOfRepetitionsTField_Text=1
+ResultsPanel_ArffFileFilter_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ARFF
+SetupPanel_AdvanceIteratorFirst_SetToolTipText_Text=\u062A\u0642\u062F\u064A\u0645 \u0627\u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0645\u062E\u0635\u0635 \u0642\u0628\u0644 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ResultsPanel_SetInstancesFromFile_FromLab_Text=\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0645\u0644\u0641 ...
+DistributeExperimentPanel_PopupHostPanel_Text=\u062A\u0639\u062F\u064A\u0644 \u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u0645\u0636\u064A\u0641\u064A\u0646
+ResultsPanel_SetInstancesFromFile_Error_FromLab_Text_Second=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0639\u0644\u0649 \u0623\u0646\u0647 ' 
+OutputFormatDialog_CreateDialog_MeanPrecision_JLabel_Text=\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u062F\u0642\u0629
+SetupPanel_Main_WindowClosing_Error_Text_First=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064A\u0629 \:
+GeneratorPropertyIteratorPanel_SelectProperty_Error_Text_Second=\u062A\u0639\u064A\u064A\u0646 \u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u062F\u064A\u062F\u0629 \u0644\u0645\u062D\u0631\u0631 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_First=\u0623\u0644\u063A\u064A
+SimpleSetupPanel_DestinationAddressChanged_DEST_ARFF_TEXT_FileCreateTempFile_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627 
+ResultsPanel_SetTTester_OutBuff_Text_Second=\n\n
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Second=\u0644\u0627\u064A\u0648\u062C\u062F \u0645\u0624\u0634\u0631 \u0644\u0644\u062A\u062C\u0631\u0628\u0629
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Fifth=\u062D\u0635\u0644\u062A \u0639\u0644\u0649 \u0645\u0624\u0634\u0631 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+AlgorithmListPanel_Item_JMenuItem_Text_First=\u0623\u0636\u0641 \u0627\u0644\u062A\u0643\u0648\u064A\u0646 ...
+Experimenter_TabbedPane_Run_Key_Text=\u062A\u0634\u063A\u064A\u0644
+SimpleSetupPanel_ExpTypeChanged_TYPE_CROSSVALIDATION_TEXT_ExperimentParameterLabel_Text_First=\u0639\u062F\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \:
+RunNumberPanel_LowerText_JTextField_Text=1
+SimpleSetupPanel_SetExperiment_UnsupportedIterations_Text=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0642\u064A\u0645\u0629 runLower \u0644\u0627 \u062A\u0633\u0627\u0648\u064A 1
+SetupPanel_Main_Exception_Text=\u064A\u062C\u0628 \u0625\u0639\u0637\u0627\u0621 \u0627\u0633\u0645 \u0645\u0644\u0641 \u0645\u0639 -F \u0627\u0644\u062E\u064A\u0627\u0631
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Second=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+ResultsPanel_NO_SOURCE_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0635\u062F\u0631
+AlgorithmListPanel_ActionPerformed_Error_JOptionPaneShowMessageDialog_Text_Second=\u062E\u0637\u0623 ...
+ResultsPanel_SetTTester_Main_JFrame_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627\: \u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0646\u062A\u0627\u0626\u062C
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Fourth=\u0625\u0646\u062A\u0647\u0649 
+SetupModePanel_AdvancedSetupRBut_JRadioButton_Text=\u0645\u062A\u0642\u062F\u0645
+RunPanel_ExperimentRunner_Error_Text_First=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u0627\u0631\u063A\u0629\!
+Experimenter_Main_Error_Text_Second=\n \u0627\u0644\u062E\u0631\u0648\u062C
+RunPanel_ExperimentRunner_Error_Text_Fifth=\u0646\u0633\u062E \u0627\u0644\u062A\u062C\u0631\u0628\u0629 
+SimpleSetupPanel_CsvFileFilter_Text=\u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u0641\u0635\u0648\u0644\u0629 \u0641\u064A\u0645\u0647\u0627 \u0628\u0627\u0644\u0641\u0627\u0635\u0644\u0629
+Experimenter_TabbedPane_Analyse_Value_Text=\u062A\u062D\u0644\u064A\u0644 \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+DistributeExperimentPanel_ConfigureHostNames_SetToolTipText_Text=\u062A\u062D\u0631\u064A\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0636\u064A\u0641\u064A\u0646 \u0627\u0644\u0628\u0639\u064A\u062F\u064A\u0646
+DatasetListPanel_ActionPerformed_Error_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+AlgorithmListPanel_DownBut_JButton_Text=\u0627\u0644\u0623\u0633\u0641\u0644
+GeneratorPropertyIteratorPanel_Main_Error_Text_First=\u0642\u064A\u0644\u0648\u0644\u0629 \u0642\u0635\u064A\u0631\u0629
+SimpleSetupPanel_OrderAlgorithmsFirstRBut_JRadioButton_Text=\u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0627\u062A \u0623\u0648\u0644\u0627
+DatasetListPanel_ActionPerformed_Error_JOptionPaneShowMessageDialog_Text_Second='\:\n
+RunPanel_ExperimentRunner_ActionPerformed_LogMessage_Text_Second=\u0627\u0644\u0642\u062F \u062A\u0645 \u0627\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Sixth_End=\u0627\u0644\u0623\u062E\u0637\u0627\u0621
+ResultsPanel_PerformBut_JButton_Text=\u0623\u062F\u0627\u0621 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+SimpleSetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_Third=\u0641\u062A\u062D \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+ResultsPanel_SetTTester_SetTester_Text=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u062E\u062A\u0628\u0627\u0631 \u0644\u0640 \:
+AlgorithmListPanel_EditBut_JButton_Text=\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062E\u062A\u0627\u0631 ...
+DatasetListPanel_AddBut_JButton_Text=\u0625\u0636\u0627\u0641\u0629 \u062C\u062F\u064A\u062F\u0629 ...
+DistributeExperimentPanel_SplitByRun_SetToolTipText_Text=\u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0645\u0646 \u062D\u064A\u062B \u0639\u062F\u062F \u0627\u0644\u0646\u0633\u062E
+DatasetListPanel_EditBut_JButton_Text=\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062E\u062A\u0627\u0631 ...
+SetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0641\u062A\u062D \u0645\u0644\u0641 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \: \n
+HostListPanel_DeleteBut_JButton_Text=\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u062F\u062F
+RunPanel_ExperimentRunner_Run_StatusMessage_Text_Third=\u062A\u062D\u0644\u064A\u0644 \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0639\u0645\u0644 ...
+ResultsPanel_Lab_JLabel_Text_Seventh=\u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+SimpleSetupPanel_SaveBut_JButton_Text=\u062D\u0641\u0638 ...
+SimpleSetupPanel_ExpRegressionRBut_JRadioButton_Text=\u062A\u0631\u0627\u062C\u0639
+ResultsPanel_TestsButton_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+AlgorithmListPanel_Main_JFrame_Text=\u0642\u0627\u0626\u0645\u0629 \u0645\u062D\u0631\u0631 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629
+OutputFormatDialog_Main_Aborted_Text=\u062A\u0645 \u0627\u0644\u0642\u0637\u0639
+ResultsPanel_OutText_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u064A\u062C\u0629
+SimpleSetupPanel_SetExperiment_NumberOfRepetitionsTField_SetText_Text=1
+SetupPanel_Main_Error_Text_Third=\u062A\u0645
+RunPanel_ExperimentRunner_Run_StatusMessage_Text_Second=\u062A\u0643\u0631\u0627\u0631 ...
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Sixth_Front=\u0643\u0627\u0646\u062A \u0647\u0646\u0627\u0643 
+SimpleSetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_Second=\n \u0627\u0644\u0633\u0628\u0628\: \n
+SimpleSetupPanel_ExpTypeChanged_TYPE_CROSSVALIDATION_TEXT_ExperimentParameterLabel_Text_Second=\u0646\u0633\u0628\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628\:
+SetupPanel_OpenBut_JButton_Text=\u0641\u062A\u062D...    
+GeneratorPropertyIteratorPanel_Options_Disabled_Text=\u0645\u0639\u0637\u0644
+RunPanel_ExperimentRunner_Run_StatusMessage_Text_Fourth=\u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0639\u0646 \u0628\u0639\u062F...
+SetupPanel_SaveBut_JButton_Text=\u062D\u0641\u0638 ...
+SetupPanel_Main_WindowClosing_Error_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0643\u062A\u0627\u0628\u0629 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0625\u0644\u0649\:
+ExperimenterDefaults_GetDestination_Text=\u0645\u0644\u0641 ARFF
+SetupPanel_AdvanceDataSetFirst_JRadioButton_Text=\u0623\u0648\u0644\u0627 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A 
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Third=\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0624\u0634\u0631 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+AlgorithmListPanel_Error_JOptionPaneShowMessageDialog_Text_Front=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0644\u064A\u0644 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \n
+ResultsPanel_FromFileBut_JButton_Text=\u0645\u0644\u0641 ...
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Fifth_End=\u062E\u0637\u0623
+SetupModePanel_SimpleSetupRBut_JRadioButton_Text=\u0628\u0633\u064A\u0637
+ResultsPanel_SetInstancesFromDBaseQuery_Error_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 
+AlgorithmListPanel_Item_JMenuItem_Text_Third=\u0646\u0633\u062E \u0627\u0644\u062A\u0643\u0648\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629
+Experimenter_Main_WekaExperimentEnvironment_JFrame_Text=\u0628\u064A\u0626\u0629 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627 
+OutputFormatDialog_Main_Accepted_Text=\u0645\u0642\u0628\u0648\u0644
+ResultsPanel_SetTTester_TestsModel_Element_Text_First=\u0645\u0644\u062E\u0635
+SimpleSetupPanel_TYPE_FIXEDSPLIT_TEXT_Text=\u0646\u0633\u0628\u0629 \u0627\u0644\u0641\u0635\u0644 \u0644\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 (\u0627\u0644\u062A\u0631\u062A\u064A\u0628 \u0645\u062D\u0641\u0648\u0638)
+SimpleSetupPanel_BrowseDestinationButton_JButton_Text=\u062A\u0635\u0641\u062D ...
+SimpleSetupPanel_ExpFilter_ExtensionFileFilter_Text_First=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (*
+RunPanel_ExperimentRunner_Main_Error_Text_Second=\n \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629  \n
+SimpleSetupPanel_DestinationTypeChanged_BrowseDestinationButton_Text=\u062A\u0635\u0641\u062D ...
+ResultsPanel_ResultKeyLabel_JButton_Text=\u0639\u0645\u0648\u062F
+SimpleSetupPanel_NumIter_JPanel_Add_JLabel_Text=\u0639\u062F\u062F \u0645\u0646 \u062D\u0627\u0644\u0627\u062A \u0627\u0644\u062A\u0643\u0631\u0627\u0631 \:
+RunPanel_ExperimentRunner_Error_Text_Third=\u0643\u062A\u0627\u0628\u0629 \u0646\u0633\u062E\u0629 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+RunPanel_ExperimentRunner_Run_Error_Text=\u062A\u0645
+SetupPanel_RadioButs_JPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u062A\u062D\u0643\u0645 \u0641\u064A \u0627\u0644\u062A\u0643\u0631\u0627\u0631
+SimpleSetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \: \n
+AlgorithmListPanel_SetBorder_Text=\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629
+RunPanel_ExperimentRunner_Main_JFrame_Text=\u062A\u0634\u063A\u064A\u0644  \u062A\u062C\u0631\u0628\u0629 \u0648\u064A\u0643\u0627
+ResultsPanel_DatasetKeyBut_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+DatasetListPanel_ActionPerformed_Error_JOptionPaneShowMessageDialog_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641
+ResultsPanel_Lab_JLabel_Text_Sixth=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0627\u0646\u062D\u0631\u0627\u0641 \u0627\u0644\u0645\u0639\u064A\u0627\u0631\u064A
+SetupPanel_XMLFilter_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (* . XML)
+SimpleSetupPanel_Control_JPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u062A\u062D\u0643\u0645 \u0641\u064A \u0627\u0644\u062A\u0643\u0631\u0627\u0631
+DistributeExperimentPanel_SplitByDataSet_SetToolTipText_Text=\u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+RunPanel_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+ResultsPanel_SetInstancesFromFile_Error_Text=\u0646\u0648\u0639 \u0645\u0644\u0641 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+SimpleSetupPanel_ArffFileFilter_Text=\u0645\u0644\u0641\u0627\u062A ARFF
+OutputFormatDialog_CreateDialog_OutputFormat_JLabel_Text=\u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+RunPanel_ExperimentRunner_Run_LogMessage_Text_Fifth_Front=\u0643\u0627\u0646 \u0647\u0646\u0627\u0643 
+ResultsPanel_SaveOutBut_JButton_Text=\u062D\u0641\u0638 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+Experimenter_Main_LoggingStarted_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+SetupPanel_NotesFrame_JFrame_Text=\u0645\u0644\u0627\u062D\u0638\u0627\u062A
+RunPanel_ExperimentRunner_Run_Current_Text_First=\u0627\u0644\u062A\u0643\u0631\u0627\u0631\:
+RunNumberPanel_Main_JFrame_Text=\u0645\u062D\u0631\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0628\u064A\u0646\u0627\u062A.
+OutputFormatDialog_CreateDialog_StdDevPrecision_JLabel_Text=\u062F\u0642\u0629 \u0627\u0644\u0627\u0646\u062D\u0631\u0627\u0641 \u0627\u0644\u0645\u0639\u064A\u0627\u0631\u064A. 
+ResultsPanel_SetTTester_TestsModel_Element_Text_Second=\u062A\u0635\u0646\u064A\u0641
+SimpleSetupPanel_NotesFrame_JFrame_Text=\u0645\u0644\u0627\u062D\u0638\u0627\u062A
+RunPanel_ExperimentRunner_Run_Current_Text_Second=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\=
+SetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text_Third=\u0641\u062A\u062D \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+AlgorithmListPanel_Main_Error_Text_First=\u0642\u064A\u0644\u0648\u0644\u0629 \u0642\u0635\u064A\u0631\u0629
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_First=\u0627\u0644\u0645\u0644\u0641 '
+ResultsPanel_OutputFormatButton_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+DatasetListPanel_GetFilesRecursively_Error_Text=\u062D\u062F\u062B \u062E\u0637\u0623 \u0641\u064A \u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0639\u0646\u062F \u0642\u0631\u0627\u0621\u0629 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A
+Experimenter_TabbedPane_Analyse_Key_Text=\u062A\u062D\u0644\u064A\u0644
+AlgorithmListPanel_XMLFilter_Text_Front=. XML
+ResultsPanel_SetInstances_FromLab_Text_First=Got 
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_Fifth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ExperimenterDefaults_GetExperimentType_Text=\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+ExperimenterDefaults_STATIC_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u062E\u0635\u0627\u0626\u0635. \u064A\u062C\u0628  \u0627\u0644\u0627\u0635\u0644\u0627\u062D \u0642\u0628\u0644  \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631
+DatasetListPanel_RelativeCheck_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0646\u0633\u0628\u064A\u0629
+ResultsPanel_SetTTester_SaveBuffer_JOptionPaneShowMessageDialog_Text_First=\u062D\u0641\u0638 \u0627\u0644\u0645\u0644\u0641
+SimpleSetupPanel_SetExperiment_UnknownSplitEvaluator_Text=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0645\u0642\u0633\u0645 \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+ResultsPanel_SetInstancesFromExp_FromLab_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0644\u0641 \u0646\u062A\u064A\u062C\u0629
+DistributeExperimentPanel_Main_JFrame_Text=\u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+SimpleSetupPanel_SetExperiment_DatabaseResultListener_ResultsDestinationPathLabel_Text=\u0627\u0644\u0631\u0627\u0628\u0637\:
+SimpleSetupPanel_DestinationAddressChanged_DEST_CSV_TEXT_FileCreateTempFile_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627 
+DatasetListPanel_DownBut_JButton_Text=\u0627\u0644\u0623\u0633\u0641\u0644
+SimpleSetupPanel_TYPE_RANDOMSPLIT_TEXT_Text=\u0646\u0633\u0628\u0629 \u0627\u0644\u0641\u0635\u0644 \u0644\u0644\u062A\u062F\u0631\u064A\u0628 \u0648 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 (\u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629)
+SetupPanel_KOMLFilter_ExtensionFileFilter_Text_First=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (*
+Experimenter_TabbedPane_Setup_Key_Text=\u0627\u0644\u0625\u0639\u062F\u0627\u062F
+SimpleSetupPanel_SetExperiment_InstancesResultListener_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+DatasetListPanel_DeleteBut_JButton_Text=\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u062F\u062F
+ResultsPanel_OutText_SetBorder_BorderFactoryCreateTitledBorder_Text_First=\u0627\u0644\u0645\u0635\u062F\u0631
+SetupPanel_ExpFilter_ExtensionFileFilter_Text_First=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (*
+SimpleSetupPanel_SetExperiment_UnknownPropertyIteration_Text_Alpha=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0642\u064A\u0645\u0629 runLower \u0644\u0627 \u062A\u0633\u0627\u0648\u064A 1
+ResultsPanel_SetInstancesFromFile_Error_FromLab_Text_First=\u0627\u0644\u0645\u0644\u0641 '
+DatasetListPanel_Main_Error_Text_Second=\u062A\u0645
+SimpleSetupPanel_OpenExperiment_Exception_JOptionPaneShowMessageDialog_Text=\u0641\u062A\u062D \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+GeneratorPropertyIteratorPanel_Options_Enabled_Text=\u062A\u0645\u0643\u064A\u0646
+SimpleSetupPanel_SetExperiment_CSVResultListener_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+SimpleSetupPanel_UserWantsToConvert_JOptionPaneShowConfirmDialog_Text_Second=\u062A\u0623\u0643\u064A\u062F \u0627\u0644\u062A\u062D\u0648\u064A\u0644
+ResultsPanel_SetTTester_OutBuff_Text_First=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062A\u0627\u062D\u0629
+SimpleSetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_Third=\u062D\u0641\u0638 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+SimpleSetupPanel_Dest_JPanel_BorderFactoryCreateTitledBorder_Text=\u0648\u062C\u0647\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C 
+RunPanel_ExperimentRunner_Error_Text_Second=\u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u062C\u0631\u0628\u0629\: 
+ResultsPanel_SetInstancesFromExp_FromLab_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+DatasetListPanel_UpBut_JButton_Text=\u0641\u0648\u0642
+ResultsPanel_FromExpBut_JButton_Text=\u062A\u062C\u0631\u0628\u0629
+SetupPanel_Main_WindowClosing_Error_Text_Third=\n 
+SetupPanel_AdvanceIteratorFirst_JRadioButton_Text=\u0627\u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0645\u062E\u0635\u0635 \u0623\u0648\u0644\u0627
+RunPanel_ExperimentRunner_Error_Text_Fourth=\u0642\u0631\u0627\u0621\u0629 \u0646\u0633\u062E\u0629 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+HostListPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0645\u0636\u064A\u0641\u064A\u0646
+ResultsPanel_SetTTester_SaveBuffer_JOptionPaneShowMessageDialog_Text_Second=\u0627\u0644\u0646\u062A\u0627\u0626\u062C
+SimpleSetupPanel_DEST_CSV_TEXT_Text=\u0645\u0644\u0641 CSV
+GeneratorPropertyIteratorPanel_SelectProperty_Error_Text_First=\u0627\u0644\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629
+SimpleSetupPanel_KOMLFilter_ExtensionFileFilter_Text_First=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (*
+SimpleSetupPanel_NotesButton_JButton_Text=\u0645\u0644\u0627\u062D\u0638\u0627\u062A
+SetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \: \n
+SetupPanel_NewBut_JButton_Text=\u062C\u062F\u064A\u062F
+RunPanel_ExperimentRunner_Run_Current_Text_Third=\u062A\u0634\u063A\u064A\u0644\=
+ResultsPanel_SetTTester_Name_Text=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062A\u0627\u062D\u0629
+GeneratorPropertyIteratorPanel_BorderFactoryCreateTitledBorder_Text=\u0645\u0648\u0644\u062F \u0627\u0644\u062E\u0635\u0627\u0626\u0635 
+AlgorithmListPanel_CopyObject_Error_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0627\u062A\: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0646\u0633\u062E \u0627\u0644\u0639\u0646\u0635\u0631
+ResultsPanel_SetInstancesFromDBaseQuery_FromLab_Text_Sixth=\u0623\u0644\u063A\u064A
+SetupPanel_SaveExperiment_Error_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629\: \n 
+DatasetListPanel_Main_JFrame_Text=\u0645\u062D\u0631\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0628\u064A\u0646\u0627\u062A.
+RunNumberPanel_B1_JLabel_Text=\u0645\u0646\:
+SimpleSetupPanel_XMLFilter_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 (* . XML)
+SimpleSetupPanel_SaveExperiment_Error_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629\: \n 
+AlgorithmListPanel_UpBut_JButton_Text=\u0641\u0648\u0642
+ResultsPanel_SetInstancesFromFile_Error_JOptionPaneShowOptionDialog_Text_Third=\u0627\u0644\u0645\u0644\u0641.\n
+RunPanel_ExperimentRunner_Run_LogMessage_Text_First=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+ResultsPanel_ResultKeyBut_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+ResultsPanel_OutText_SetFont_Font_Text=\u0623\u062D\u0627\u062F\u064A \u0627\u0644\u0645\u0633\u0627\u0641\u0629
+ResultsPanel_CsvFileFilter_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A CSV
+SimpleSetupPanel_TYPE_CROSSVALIDATION_TEXT_Text=\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+GeneratorPropertyIteratorPanel_ActionPerformed_Text=\u062A\u063A\u064A\u0631 \u062D\u0627\u0644\u0629 \u0627\u0644\u0645\u062D\u0631\u0631
+ResultsPanel_Output_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0645\u062E\u0631\u062C\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+AlgorithmListPanel_XMLFilter_Text_End=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0635\u0646\u0641 (*. XML)
+GeneratorPropertyIteratorPanel_PropertyChange_Error_Text=\u062A\u0639\u062F\u064A\u0644 \u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0643\u0631\u0631\u0629 \u0641\u064A \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+ResultsPanel_SetInstancesFromExp_FromLab_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0646\u062A\u0627\u0626\u062C \u0645\u0646 \u0627\u0644\u062A\u062C\u0631\u0628\u0629
+SimpleSetupPanel_DestinationAddressChanged_Exception_Text=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0645\u0624\u0642\u062A. \u064A\u062A\u0645 \u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0642\u064A\u0627\u0633\u064A
+SimpleSetupPanel_SetExperiment_UnrecognisedResultListener_UserWantsToConvert_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+AlgorithmListPanel_ActionPerformed_JOptionPaneShowInputDialog_Text=\u0627\u0644\u062A\u0643\u0648\u064A\u0646 ( <classname> [ <options> ] )
+SetupPanel_SaveExperiment_Exception_JOptionPaneShowMessageDialog_Text_Second=\n \u0627\u0644\u0633\u0628\u0628\: \n
+DatasetListPanel_RelativeCheck_SetToolTipText_Text=\u062A\u062E\u0632\u064A\u0646 \u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0646\u0633\u0628\u0629 \u0625\u0644\u0649 \u0627\u0644\u062F\u0644\u064A\u0644 \u0627\u0644\u0628\u062F\u0627\u064A\u0629
+DistributeExperimentPanel_SplitByRun_JRadioButton_Text=\u0628\u0648\u0627\u0633\u0637\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644
+ResultsPanel_P3_SetBorder_BorderFactoryCreateTitledBorder_Text=\u062A\u0643\u0648\u064A\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+SimpleSetupPanel_KOMLFilter_ExtensionFileFilter_Text_Second=)
+SimpleSetupPanel_SetExperiment_UnknownSplitEvaluator_Text_First=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0645\u0642\u0633\u0645 \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+SimpleSetupPanel_DEST_ARFF_TEXT_Text=\u0645\u0644\u0641 ARFF
+SimpleSetupPanel_SetExperiment_UnknownPropertyIteration_Text_First=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0645\u0643\u0631\u0631 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+SimpleSetupPanel_SetExperiment_UnknownPropertyIteration_Text=\u0639\u062F\u0645 \u0627\u0644\u062A\u0648\u0627\u0641\u0642 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0633\u064A\u0637\u0629\: \u0645\u0646\u062A\u062C \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+ResultsPanel_SetInstancesFromFile_Error_FromLab_Text_Third=\u0627\u0644\u0645\u0644\u0641.
+SetupPanel_NotesButton_JButton_Text=\u0645\u0644\u0627\u062D\u0638\u0627\u062A
diff --git a/src/main/java/weka/gui/explorer/messages/messages_ar.properties b/src/main/java/weka/gui/explorer/messages/messages_ar.properties
new file mode 100644
index 0000000..2b5943e
--- /dev/null
+++ b/src/main/java/weka/gui/explorer/messages/messages_ar.properties
@@ -0,0 +1,667 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+ClustererPanel_TrainBut_JRadioButton_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+ClustererPanel_ReEvaluateModel_Run_Log_LogMessage_Text_First=\u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 (
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Eighth=\u0645\u0648\u0627\u0641\u0642
+ClustererPanel_StartClusterer_Run_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 
+ClassifierPanel_OutputModelBut_JCheckBox_Text=\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+ClassifierPanel_SetInstances_Type_AttributeSTRING_Text=(Str)  
+PreprocessPanel_ApplyFilter_Run_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u0637\u0628\u064A\u0642  \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629 
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Tenth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Tenth=\n\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0644\u0644\u0623\u0636\u0639\u0627\u0641
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Third=\u0628\u062D\u062B \n\:
+ClassifierPanel_RandomLab_JLabel_Text=\u0628\u0630\u0648\u0631 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0640  XVal / % Split
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \=\=\=\n\n
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Seventh=\u0633\u0645\u0627\u062A\:   
+PreprocessPanel_SaveWorkingInstancesToFileQ_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062D\u0641\u0638  \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_Visualize_WindowTitle_Text_Second=)
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Second=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Thirteenth=\n  \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \n
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Fourth=\u0627\u0644\u0645\u062E\u0637\u0637\:
+VisualizePanel_GetTabTitle_Text=\u062A\u0645\u062B\u064A\u0644
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Nineteenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A...
+ClassifierPanel_StorePredictionsBut_SetToolTipText_Text=\u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u062A\u0646\u0628\u0624\u0627\u062A  \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0644\u0644\u062A\u0635\u0648\u064A\u0631 \u0641\u064A \u0648\u0642\u062A \u0644\u0627\u062D\u0642
+ClassifierPanel_Visualize_VisMainBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+Explorer_LogPanel_LogMessage_Text_First=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_Fifth=)
+ClustererPanel_VisualizeClusterer_LoadModel_JMenuItem_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+AssociationsPanel_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+AssociationsPanel_SetInstances_AttributeSTRING_Text=(Str) 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Seventh=...
+PreprocessPanel_Log_StatusMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0632\u0627\u0644\u0629 \u0633\u0645\u0627\u062A
+ClassifierPanel_StartClassifier_OutBuffer_Text_Seventeenth=\u062A\u0642\u0633\u064A\u0645 
+ClassifierPanel_EvalWRTCostsBut_SetToolTipText_Text=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0623\u062E\u0637\u0627\u0621 \u0645\u0639 \u0627\u0644\u0623\u062E\u0630 \u0628\u0639\u064A\u0646 \u0627\u0644\u0625\u0639\u062A\u0628\u0627\u0631 \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u0643\u0644\u0641\u0629
+PreprocessPanel_ApplyFilter_Run_Exception_Text=\u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0641\u0627\u0631\u063A\u0629.
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_Second=\u0631\u0642\u0645 \u0627\u0644\u062D\u0627\u0644\u0629,    \u0627\u0644\u062D\u0642\u064A\u0642\u064A, \u0627\u0644\u0645\u062A\u0648\u0642\u0639, \u0627\u0644\u062E\u0637\u0623
+AttributeSelectionPanel_TrainBut_JRadioButton_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0643\u0627\u0645\u0644\u0629
+AssociationsPanel_GetTabTitle_Text=\u0631\u0628\u0637
+ClustererPanel_GetTabTitle_Text=\u062A\u062C\u0645\u064A\u0639
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Tenth=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u062C\u0645\u064A\u0639 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Eighteenth=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0632\u0648\u062F\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062E\u062F\u0645\:
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Nineth=\n
+AssociationsPanel_StopBut_SetToolTipText_Text=\u062A\u0648\u0642\u0641 \u0627\u0644\u0631\u0627\u0628\u0637
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Fifth=...
+ClassifierPanel_PercentText_JTextField_Text=66
+ClustererPanel_StartClusterer_Run_Log_LogMessage_Text_First=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+ClassifierPanel_Main_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+ClassifierPanel_Visualize_VisThreshold_JMenu_Text=\u0639\u0631\u0636 \u0627\u0644\u0645\u0646\u062D\u0646\u0649 \u0627\u0644\u062D\u062F
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \=\=\=\n\n
+ClassifierPanel_SetInstances_Type_AttributeNUMERIC_Text=(Num)
+ClustererPanel_VisualizeClusterer_LoadClusterer_Log_StatusSessage_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0645\u0644 \u0645\u0646 \u0627\u0644\u0645\u0644\u0641 ...
+ClassifierPanel_TestSplitBut_JRadioButton_Text=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0648\u0632\u062F\u0629
+AttributeSelectionPanel_TrainBut_SetToolTipText_Text=\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0627\u062A \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0643\u0627\u0645\u0644
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Eigth=\u0645\u0648\u0627\u0641\u0642
+AttributeSelectionPanel_VisualizeTransformedData_JFrame_Text=\u0639\u0627\u0631\u0636 \u0645\u062E\u062A\u0627\u0631 \u0633\u0645\u0627\u062A \u0648\u064A\u0643\u0627\:
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyFifth=\n
+ClustererPanel_ReEvaluateModel_Run_Log_LogMessage_Text_Third=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 \u0628\u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+PreprocessPanel_Log_StatusMessage_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0632\u0627\u0644\u0629 \u0633\u0645\u0627\u062A
+PreprocessPanel_Log_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0632\u0627\u0644\u0629 \u0633\u0645\u0627\u062A\:
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentySeventh=\n
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyFirst=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Eighteenth=\n 
+PreprocessPanel_ColorBox_SetToolTipText_Text=\u0633\u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0633\u0645\u0629 \u0627\u0644\u062A\u064A \u0627\u062E\u062A\u064A\u0631\u062A \u0644\u062A\u0643\u0648\u0646 \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0639\u0646\u062F\u0645\u0627 \u064A\u062A\u0645 \u062A\u0637\u0628\u064A\u0642 \u0639\u0627\u0645\u0644 \u062A\u0635\u0641\u064A\u0629.
+ClassifierPanel_Visualize_VMC_SetName_Text_First=. (\u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 
+AttributeSelectionPanel_StopBut_SetToolTipText_Text=\u062A\u0648\u0642\u0641 \u0645\u0647\u0645\u0629 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0629
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyEighth=\=\=\= \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u062E\u062A\u0628\u0627\u0631 \=\=\=
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Third=\n
+ClassifierPanel_GetTabTitle_Text=\u0635\u0646\u0641
+ClassifierPanel_SetTestBut_JButton_Text=\u062A\u0639\u064A\u064A\u0646 ...
+AttributeSelectionPanel_SeedLab_JLabel_Text=\u0628\u0630\u0631
+ClustererPanel_VisualizeClusterer_SaveBuffer_Log_LohMessage_Text=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638 \u0628\u0646\u062C\u0627\u062D.
+ClassifierPanel_Visualize_VisMargin_JMenuItem_Text=\u0639\u0631\u0636 \u0627\u0644\u0645\u0646\u062D\u0646\u0649 \u0627\u0644\u0647\u0627\u0645\u0634
+PreprocessPanel_UndoBut_SetToolTipText_Text=\u0627\u0644\u062A\u0631\u0627\u062C\u0639 \u0639\u0646 \u0627\u0644\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0625\u0644\u0649 \u0627\u0644\u0628\u064A\u0646\u0627\u062A.
+Explorer_LogPanel_LogMessage_Text_Third=-
+AssociationsPanel_StartAssociator_Run_Log_StatusMessage_Text_Fifth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+ClustererPanel_ModelFilter_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0643\u0627\u0626\u0646
+ClassifierPanel_Visualize_VMC_SetROCString_Text_Second=)
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Sixth=\n
+ClassifierPanel_LoadClassifier_Log_StatusMessage_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0645\u0644 \u0645\u0646 \u0627\u0644\u0645\u0644\u0641 ...
+ClassifierPanel_StartClassifier_OutBuffer_Text_Fifteenth=
+PreprocessPanel_GenerateInstances_Run_Dialog_Text=\u0645\u0646\u062A\u062C \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClassifierPanel_Visualize_WindowTitle_Text_First=(\u0627\u0644\u0641\u0626\u0629 \= 
+ClassifierPanel_Visualize_SaveModel_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+PreprocessPanel_GenerateBut_JButton_Text=\u062A\u0648\u0644\u064A\u062F ...
+Explorer_Main_Run_Error_Text_Second=\n \u0627\u0644\u062E\u0631\u0648\u062C
+PreprocessPanel_Log_LogMessage_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0625\u0632\u0627\u0644\u0629 \u0643\u0627\u0641\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0645\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \!
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Fourth=\u0627\u0644\u0645\u062E\u0637\u0637\:
+AttributeSelectionPanel_P2_BorderFactoryCreateTitledBorder_Text=\u0648\u0636\u0639 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0633\u0645\u0627\u062A
+ClassifierPanel_SetInstances_Type_AttributeDEFAULT_Text=(???) 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_Second=\u0627\u0644\u0623\u0645\u0631\: 
+ClassifierPanel_StartClassifier_OutBuffer_Text_FourtySecond=\=\=\= \u0627\u0644\u062A\u0639\u0644\u064A\u0645\u0627\u062A \u0627\u0644\u0628\u0631\u0645\u062C\u064A\u0629 \=\=\=\n\n
+Explorer_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+PreprocessPanel_Filter_BorderFactoryCreateTitledBorder_Text=\u062A\u0635\u0641\u064A\u0629
+ClustererPanel_ReEvaluateModel_Run_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639\:\n 
+ClassifierPanel_StartClassifier_OutBuffer_Text_Fifth=\n 
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Seventh=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0645\u062D\u0648\u0644
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Sixth=\u062A\u0646\u0628\u064A\u0647\!
+AttributeSelectionPanel_Visualize_SaveTrans_JMenuItem_Text_First=\u062D\u0641\u0638 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062D\u0648\u0644\u0629 ...
+ClassifierPanel_ModelFilter_FileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0643\u0627\u0626\u0646
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Tenth=\n
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_Fourth=(
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Sixth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+AttributeSelectionPanel_Visualize_SaveOutput_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0645\u062E\u0632\u0646\u0629 
+ClustererPanel_VisualizeClusterer_ReEvaluate_JMenuItem_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062D\u0627\u0644\u064A\u0629
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TwentySecond=\=\=\= \u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0648\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0642\u0633\u0645 \u0645\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \=\=\=
+ClassifierPanel_VisualizeTree_JF_JFrame_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629 \u0644\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+PreprocessPanel_ApplyFilter_Run_Log_StatusMessage_Text_First=\u062A\u0645\u0631\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0645\u0646 \u062E\u0644\u0627\u0644 \u0627\u0644\u0641\u0644\u062A\u0631
+PreprocessPanel_TryConverter_JOptionPaneShowMessageDialog_Text_Second='.\n
+ClustererPanel_StartClusterer_Run_Exception_Text_Second=\u0644\u0645 \u064A\u062A\u0645 \u0641\u062A\u062D \u0623\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+ClustererPanel_StartClusterer_Run_Log_LogMessage_Text_Third=\u0625\u0646\u062A\u0647\u0649 
+PreprocessPanel_SaveInstancesToFile_Run_JOptionPaneShowMessageDialog_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ClassifierPanel_StartClassifier_OutBuffer_Text_Eigth=\u0633\u0645\u0627\u062A\:   
+ClassifierPanel_SaveClassifier_Log_StatusMessage_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0641\u064A \u0645\u0644\u0641 ...
+ClustererPanel_StartClusterer_Run_Exception_Text_Fifth=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0641\u0626\u0629 \u0627\u0633\u0645\u064A\u0629 \u0644\u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0639\u062A\u0645\u062F \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0627\u062A \!
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Third=\n
+ClustererPanel_VisualizeClusterer_LoadClusterer_Log_StatusMessage_Text_Second=\u0645\u0648\u0627\u0641\u0642
+ClassifierPanel_StartClassifier_OutBuffer_Text_Eleventh=\n
+PreprocessPanel_GenerateInstances_Run_JOptionPaneShowMessageDialog_Text_First=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u0646\u0634\u0627\u0621 \u0628\u064A\u0627\u0646\u0627\u062A \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+AttributeSelectionPanel_GetTabTitle_Text=\u0625\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0627\u062A
+AttributeSelectionPanel_CVText_JTextField_Text=10
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Second=\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyThird=\n
+ClassifierPanel_Visualize_VMC_SetName_Text_Third=. (\u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 
+ClassifierPanel_ReEvaluateModel_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u062F\u064A\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+ClassifierPanel_StartClassifier_OutBuffer_Text_Nineth=\n
+ClassifierPanel_EvalWRTCostsBut_JCheckBox_Text=\u062A\u0642\u064A\u064A\u0645 \u062D\u0633\u0627\u0633 \u0645\u0646 \u062D\u064A\u062B \u0627\u0644\u062A\u0643\u0644\u0641\u0629
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Thirteenth=\u062C\u0639\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0639\u0634\u0648\u0627\u0626\u064A\u0629
+PreprocessPanel_OpenURLBut_JButton_Text=\u0641\u062A\u062D \u0627\u0644\u0631\u0627\u0628\u0637 ...
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Twelveth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+AssociationsPanel_HistoryRightClickPopup_VisSepBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0641\u0635\u0644\u0629
+PreprocessPanel_SetInstancesFromFile_Run_Log_StatusMessage_Text_First=\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0645\u0644\u0641 ...
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Second=\u0627\u0644\u0645\u0641\u064A\u064A\u0645\:    
+ClassifierPanel_Visualize_PluginMenuItemSetText_Text_Second=(\u0627\u0644\u0623\u062F\u0627\u0629 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629 \u0642\u062F\u064A\u0645\u0629)
+ClassifierPanel_OutputAdditionalAttributesText_SetToolTipText_Text=Outputs additional attributes for the predictions, 'first' and 'last' are valid indices.
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_Fifth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_StartClassifier_PrintPredictionsHeader_Text_Second=\u062A\u0642\u0633\u064A\u0645 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+AttributeSelectionPanel_SaveBuffer_Log_LogMessage_Text=\u062D\u0641\u0638 \u0646\u0627\u062C\u062D.
+PreprocessPanel_ShowGeneratedInstances_SaveButton_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641
+PreprocessPanel_Undo_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0631\u0627\u062C\u0639 \u0639\u0646 \u062A\u0646\u0641\u064A\u0630 \u0627\u0644\u0639\u0645\u0644\u064A\u0629\! \n
+AssociationsPanel_MouseClicked_History_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C (\u0627\u0646\u0642\u0631 \u0628\u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0644\u062E\u064A\u0627\u0631\u0627\u062A)
+ClassifierPanel_OutputSourceCode_SetToolTipText_Text=\u0625\u062E\u0631\u0627\u062C \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u0645\u0628\u0646\u064A \u0628\u0644\u063A\u0629 \u062C\u0627\u0641\u0627
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Tenth=\n
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Eleventh=\u062A\u0645 \u0627\u0644\u062A\u062C\u0627\u0647\u0644 \: \n
+PreprocessPanel_JOptionPaneShowMessageDialog_Text_Second=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0645\u0627\u062A
+AttributeSelectionPanel_P1_1_BorderFactoryCreateTitledBorder_Text=\u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u0628\u062D\u062B
+ClassifierPanel_VisualizeBayesNet_JF_JFrame_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0644\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+ClassifierPanel_StartBut_SetToolTipText_Text=\u0627\u0628\u062F\u0623 \u0627\u0644\u062A\u0635\u0646\u064A\u0641
+ClassifierPanel_StartClassifier_Exception_Text_Fourth=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642\u064A\u0646
+ClassifierPanel_StartClassifier_Exception_Text_First=\u0639\u062F\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0623\u0643\u0628\u0631 \u0645\u0646 1
+ClassifierPanel_StartClassifier_OutBuffer_Text_Fourtyth=\n
+ClustererPanel_VisualizeClusterer_LoadClusterer_CNAme_Text_First=\u0645\u0646 \u0645\u0644\u0641 '
+ClustererPanel_GetTabTitleToolTip_Text=\u062A\u062D\u062F\u064A\u062F \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+PreprocessPanel_SetInstances_Run_Log_LogMessage_Text_First=\u0627\u0644\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0631\u0626\u0628\u0633\u064A\u0629 \u0647\u064A \u0627\u0644\u0622\u0646
+PreprocessPanel_GenerateInstances_Run_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_Fourth=\u0623\u0645\u0631 \u0645\u0635\u0646\u0641 \u0627\u0644\u062A\u0639\u0631\u064A\u0641\:
+PreprocessPanel_ApplyFilter_Run_Log_StatusMessage_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0645\u062A\u0631\u0627\u062C\u0639 \u0639\u0646\u0647\u0627
+ClassifierPanel_Visualize_VisCostBenefit_JMenu_Text=\u062A\u062D\u0644\u064A\u0644  \u0627\u0644\u062A\u0643\u0644\u0641\u0629 / \u0627\u0644\u0645\u0646\u0641\u0639\u0629
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_First=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClustererPanel_VisualizeClusterer_LoadClusterer_Log_LogMessage_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0645\u0644 \u0645\u0646 \u0627\u0644\u0645\u0644\u0641 '
+PreprocessPanel_ApplyFilter_Run_Log_StatusMessage_Text_Third=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Fifth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_ReEvaluateModel_Log_LogMessage_Text_First=\u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 (
+PreprocessPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+PreprocessPanel_ApplyFilter_Run_Log_LogMessage_Text_First=\u0627\u0644\u0623\u0645\u0631\: 
+ClustererPanel_P1_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0645\u062C\u0645\u0639
+ClustererPanel_ClassesToClustersBut_JRadioButton_Text=\u062C\u0645\u0644 \u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639
+PreprocessPanel_GenerateInstances_Run_GenerateButton_SetToolTipText_Text=\u0625\u0646\u0634\u0627\u0621 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0641\u0642\u0627 \u0644\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A.
+ClustererPanel_TrainBut_SetToolTipText_Text=\u062A\u062C\u0645\u064A\u0639 \u0646\u0641\u0633 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u062C\u0645\u0639 \u0639\u0644\u064A\u0647\u0627
+ClassifierPanel_StartClassifier_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641
+ClassifierPanel_SaveClassifier_JOptionPaneShowMessageDialog_Text_First=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062D\u0641\u0638
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TwentyFourth=\=\=\= \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u062E\u062A\u0628\u0627\u0631 \=\=\=
+AttributeSelectionPanel_SetInstances_AttributeSTRING_Type_Text=(Str)    
+ClassifierPanel_OutputEntropyBut_JCheckBox_Text=Output entropy evaluation measures
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Eigth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_SaveClassifier_Log_LogMessage_Text_First=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0641\u0648\u0638 (
+PreprocessPanel_TryConverter_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641
+ClustererPanel_StartClusterer_Run_Exception_Text_Fourth=\u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Eleventh=\u062A\u0642\u064A\u064A\u0645 \u0646\u0645\u0648\u0630\u062C \u0644\u0644\u0623\u0636\u0639\u0627\u0641
+ClassifierPanel_ReEvaluateModel_Exception_Text_Third=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642\u064A\u0646
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Twelveth=\n  \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \n  \n 
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Eighth=\u0633\u0645\u0627\u062A\:   
+ClassifierPanel_StartClassifier_OutBuffer_Text_Fourteenth=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062F\u0631\u0628 \u0639\u0644\u064A\u0647\u0627  \n
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtySecond=\n
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_First=\u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645  \u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u0645\u0631\u062A\u0628 \u0645\u0646 \u0627\u062C\u0644 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Twentyth=\n\n
+PreprocessPanel_SaveBut_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0641\u0639\u0627\u0644\u0629 \u0625\u0644\u0649 \u0645\u0644\u0641
+ClassifierPanel_StartClassifier_Exception_Text_Second=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0646\u0633\u0628\u0629 \u0645\u0627 \u0628\u064A\u0646 0 \u0648 100
+ClustererPanel_StopBut_JCheckBox_Text=\u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0644\u0644\u062A\u0635\u0648\u064A\u0631
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_First=\u0627\u0644\u0625\u0646\u0634\u0627\u0621... 
+ClassifierPanel_Visualize_VMC_SetName_Text_Second=)
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Fourth=\u062C\u0639\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0639\u0634\u0648\u0627\u0626\u064A\u0629
+PreprocessPanel_SetInstancesFromFile_Run_Log_StatusMessage_Text_Third=' \u063A\u064A\u0631 \u0645\u0639\u0631\u0641 \u0639\u0644\u0649 \u0623\u0646\u0647 '
+ClassifierPanel_SourceCodeClass_SetToolTipText_Text=\u0627\u0633\u0645 \u0641\u0626\u0629 \u0627\u0644\u0645\u0635\u0646\u0641 \u0627\u0644\u0645\u0628\u0646\u064A
+ClustererPanel_StorePredictionsBut_SetToolTipText_Text=\u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u062A\u0646\u0628\u0624\u0627\u062A  \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0644\u0644\u062A\u0635\u0648\u064A\u0631 \u0641\u064A \u0648\u0642\u062A \u0644\u0627\u062D\u0642
+AssociationsPanel_StartAssociator_Run_Log_StatusMessage_Text_Second=\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Fifth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+PreprocessPanel_ShowGeneratedInstances_CloseButton_JButton_Text=\u0625\u063A\u0644\u0627\u0642
+ClassifierPanel_VisualizeCostBenefitAnalysis_WindowTitle_Text=\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\: \u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u062D\u0633\u0646\u0627\u062A \u0648 \u0627\u0644\u0633\u064A\u0626\u0627\u062A
+Explorer_LogPanel_LogMessage_Text_Second=(c) 
+ClassifierPanel_Visualize_VisGrph_JMenuItem_Text_Second=\u0639\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Fourth=\n
+PreprocessPanel_EditBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u0641\u064A \u0627\u0644\u0639\u0627\u0631\u0636 \u0644\u0644\u062A\u062D\u0631\u064A\u0631
+PreprocessPanel_EditBut_JButton_Text=\u062A\u0639\u062F\u064A\u0644 ...
+ClassifierPanel_OutputSourceCode_JCheckBox_Text=Output source code
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Fifth=\n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Seventh=\u0633\u0645\u0627\u062A\:   
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Sixth=\n
+AttributeSelectionPanel_Main_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+ClassifierPanel_StartClassifier_Exception_Text_Third=\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u062F\u064A\u062F \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+ClassifierPanel_OutputAdditionalAttributesLab_JLabel_Text=\u0625\u062E\u0631\u0627\u062C \u0633\u0645\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629
+ClassifierPanel_OutputPerClassBut_SetToolTipText_Text=Output precision/recall & true/false positives for each class
+PreprocessPanel_SetInstances_Run_Log_LogMessage_Text_Third=\u0627\u0644\u062D\u0627\u0644\u0627\u062A)
+ClustererPanel_SetUpVisualizableInstances_PredictedCluster_Text=\u062A\u062C\u0645\u064A\u0639
+ExplorerDefaults_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u062E\u0635\u0627\u0626\u0635. \u064A\u062C\u0628  \u0627\u0644\u0627\u0635\u0644\u0627\u062D \u0642\u0628\u0644  \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631
+ClassifierPanel_Visualize_DeleteOutput_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062E\u0632\u0646\u0629
+AttributeSelectionPanel_P3_BorderFactoryCreateTitledBorder_Text=\u0645\u062E\u0631\u062C\u0627\u062A \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0633\u0645\u0627\u062A
+PreprocessPanel_JOptionPaneShowMessageDialog_Text_Fourth=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0645\u0627\u062A
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_StartClassifier_OutBuffer_Text_Sixteenth=- \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0635\u062D\u0629 \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+PreprocessPanel_ShowGeneratedInstances_SaveButton_JOptionPaneShowMessageDialog_Text_First=Output successfully saved to file '
+ClustererPanel_ReEvaluateModel_Run_Log_StatusMessage_Text_Fifth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+ClassifierPanel_ReEvaluateModel_Log_LogMessage_Text_Third=\u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621 \u0645\u0646 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0642\u064A\u064A\u0645
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Eleventh=- \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0635\u062D\u0629 \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+ClassifierPanel_SetUpVisualizableInstances_PredictedClass_Attribute_Text_First=\u0645\u062A\u0646\u0628\u0623
+ClustererPanel_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+PreprocessPanel_ShowGeneratedInstances_Dialog_SetTitle_Text=\u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u0646\u0634\u0626\u0629 (\u0628\u0645\u0627 \u0641\u064A \u0630\u0644\u0643 \u062A\u0639\u0644\u064A\u0642)
+ClassifierPanel_ReEvaluateModel_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TwentyFifth=\n
+ClassifierPanel_SaveClassifier_Log_LogMessage_Text_Third='
+PreprocessPanel_GetTitle_Text=\u0645\u0639\u0627\u0644\u062C\u0629 \u0645\u0633\u0628\u0642\u0629
+ClustererPanel_VisualizeClusterer_SaveCluster_Log_LogMessage_Text_Alpha=) \u0625\u0644\u0649 \u0627\u0644\u0645\u0644\u0641 '
+PreprocessPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClustererPanel_SetInstances_Type_AttributeNUMERIC_Text=(Num)
+ClassifierPanel_OutputConfusionBut_JCheckBox_Text=\u0645\u0635\u0641\u0648\u0641\u0629 \u0646\u062A\u0627\u0626\u062C  \u0627\u0644\u063A\u0645\u0648\u0636 
+ClustererPanel_VisualizeClusterer_SaveModel_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Third=\u062A\u0646\u0628\u064A\u0647\!
+ClustererPanel_VisualizeTree_JFrame_Text=\u0639\u0627\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629 \u0644\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+PreprocessPanel_OpenDBBut_JButton_Text=\u0641\u062A\u062D \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ...
+ClassifierPanel_SaveClassifier_Log_LogMessage_Text_Second=) \u0625\u0644\u0649 \u0627\u0644\u0645\u0644\u0641 '
+ClassifierPanel_OutputConfusionBut_SetToolTipText_Text=Output the matrix displaying class confusions
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Third=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631. \u0627\u0644\u0645\u0635\u0646\u0639\u0629. \u062A\u0645
+ClassifierPanel_StartClassifier_OutBuffer_Text_Nineteenth=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0632\u0648\u062F\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062E\u062F\u0645\: \u0627\u0644\u062D\u062C\u0645 \u063A\u064A\u0631 \u0645\u062D\u062F\u062F ( \u062A\u062A\u0645 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u062A\u062F\u0631\u064A\u062C\u064A\u0627)
+ClassifierPanel_Visualize_ReEvaluate_JMenuItem_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062D\u0627\u0644\u064A\u0629
+ClustererPanel_PercentBut_JRadioButton_Text=\u0646\u0633\u0628\u0629 \u0627\u0644\u0627\u0646\u0642\u0633\u0627\u0645
+AssociationsPanel_StartAssociator_Run_Log_LogMessage_Text_First=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyFourth=\=\=\= \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0635\u062D\u0629 \=\=\= 
+ClustererPanel_PercentBut_SetToolTipText_Text=\u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0645\u0626\u0648\u064A\u0629 \u0645\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u062A\u062C\u0645\u064A\u0639 \u0645\u0627 \u062A\u0628\u0642\u0649
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Seventh=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Nineth=\u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645  \u0627\u0644\u0645\u0642\u064A\u0645 \u0627\u0644\u0630\u064A  \u064A\u0642\u064A\u0645 \n \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0641\u0631\u0639\u064A\u0629 \u0645\u0646 \u0627\u0644\u0633\u0645\u0627\u062A (\u0645\u062B\u0644 CFS) \u0645\u0646 \u0627\u062C\u0644 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \n
+ClassifierPanel_StartClassifier_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0646\u0641\u064A\u0630 \u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 
+VisualizePanel_Main_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+ClustererPanel_ReEvaluateModel_Run_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0641\u062A\u062D \u0623\u064A \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+ClassifierPanel_Visualize_VMC_SetName_Text_Fourth=)
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Fifth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0646\u0633\u062E \u0627\u0644\u0645\u0635\u0646\u0641\:
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Seventh=\u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645  \u0627\u0644\u0645\u0642\u064A\u0645 \u0627\u0644\u0630\u064A \u064A\u0642\u064A\u0645 \n \u0633\u0645\u0629 \u0648\u0627\u062D\u062F\u0629 (\u0645\u062B\u0644 InfoGain) \u0645\u0646 \u0627\u062C\u0644 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \n \u0627\u0644\u0645\u0631\u062A\u0628\u0628. \u0647\u0644 \u062A\u0631\u063A\u0628 \ [...]
+ClassifierPanel_Visualize_VisGrph_JMenuItem_Text_First=\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Nineth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_PMMLModelFilter_FileFilter_Text=\ \u0645\u0644\u0641\u0627\u062A \u0646\u0645\u0648\u0630\u062C PMML
+PreprocessPanel_SaveInstancesToFile_Run_Log_StatusMessage_Text_First=\u062D\u0641\u0638 \u0641\u064A \u0645\u0644\u0641 ...
+ClustererPanel_SetInstances_Type_AttributeDEFAULT_Text=(???) 
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Fifth=\u0628\u0646\u0627\u0621 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u0642\u0633\u0645 ... 
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Eighteenth=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649  \u0642\u0633\u0645 \u0645\u0646 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u0646\u0628\u0627\u0631. \u0627\u0644\u0645\u0635\u0646\u0639\u0629
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Fifth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A...
+AssociationsPanel_StartAssociator_Run_Log_StatusMessage_Text_Fourth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+PreprocessPanel_SetInstancesFromURL_Run_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0642\u0627\u0631\u0621 \u0645\u0635\u062F\u0631 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0631\u0627\u0628\u0637\!
+AttributeSelectionPanel_History_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C (\u0627\u0646\u0642\u0631 \u0628\u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0644\u062E\u064A\u0627\u0631\u0627\u062A)
+ClassifierPanel_TrainBut_JRadioButton_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+ClassifierPanel_SaveBuffer_Log_LogMessage_Text=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638 \u0628\u0646\u062C\u0627\u062D.
+Explorer_LogPanel_LogMessage_Text_Fourth=\u0648\u064A\u0628\: 
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Tenth=\u0647\u0644 \u062A\u0631\u063A\u0628 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645  \u0645\u0642\u064A\u0645 \u062A\u062D\u062F\u064A\u062F \u0645\u064A\u0632\u0629 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637\u061F  (\u064A\u0645\u0643\u0646\u0643 \u062F\u0627\u0626\u0645\u0627 \u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0637\u0631\u064A\u0642\u0629 \u0645\u062E\u062A\u0644\u0641\u0629 \u0 [...]
+ClassifierPanel_CVLab_JLabel_Text=\u0645\u0636\u0627\u0639\u0641\u0627\u062A
+PreprocessPanel_ShowGeneratedInstances_SaveButton_JOptionPaneShowMessageDialog_Text_Third=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
+ClustererPanel_ReEvaluateModel_Run_Exception_Text_Second=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642\u064A\u0646
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_Fifth=\u0625\u0646\u062A\u0647\u0649 
+ClassifierPanel_TestSplitBut_SetToolTipText_Text=\u0627\u062E\u062A\u0628\u0627\u0631 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062D\u062F\u062F\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+ClassifierPanel_P1_JPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0645\u0635\u0646\u0641
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_Sixth=\n
+PreprocessPanel_GetTabTitleToolTip_Text=\u0641\u062A\u062D / \u062A\u062D\u0631\u064A\u0631 / \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Seventeenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+PreprocessPanel_RemoveButton_JButton_Text=\u062D\u0630\u0641
+AssociationsPanel_StartBut_SetToolTipText_Text=\u0627\u0628\u062F\u0623 \u0627\u0644\u0631\u0628\u0637
+ClustererPanel_VisualizeClusterer_SaveBuffer_Log_LohMessage_Text_Alpha=\u062D\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0641\u064A \u0645\u0644\u0641 ...
+ClassifierPanel_SaveClassifier_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0646\u0648\u0630\u062C \=\=\=\n\n
+ClassifierPanel_VisualizeBayesNet_Error_Text=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u0645\u062B\u064A\u0644  BayesNet
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_TwentySecond=\u0627\u0644\u062D\u0627\u0644\u0627\u062A...
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Second=\u0627\u0644\u0645\u062E\u0637\u0637\:
+ClustererPanel_VisualizeClusterAssignments_JFrame_Text=\u0639\u0631\u0636 \u0645\u062C\u0645\u0639 \u0648\u064A\u0643\u0627\:
+ClassifierPanel_SetInstances_Type_AttributeRELATIONAL_Text=(Rel) 
+ClassifierPanel_Visualize_VisPlugins_JMenu_Text=\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+ClustererPanel_P2_BorderFactoryCreateTitledBorder_Text=\u0648\u0636\u0639 \u0627\u0644\u062A\u062C\u0645\u064A\u0639
+AssociationsPanel_StopBut_JButton_Text=\u062A\u0648\u0642\u0641
+VisualizePanel_GetTabTitleToolTip_Text=\u0627\u0633\u062A\u0643\u0634\u0627\u0641 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClassifierPanel_PercentLab_JLabel_Text=%
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Fifth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClassifierPanel_RandomLab_SetToolTipText_Text=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0644\u0644\u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A
+AssociationsPanel_StartAssociator_Run_Log_LogMessage_Text_Third=\u0625\u0646\u062A\u0647\u0649 
+PreprocessPanel_ShowGeneratedInstances_CloseButton_SetToolTipText_Text=\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062D\u0648\u0627\u0631
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TimeTakenPercentage=\u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0644\u0627\u0632\u0645 \u0644\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C (\u0646\u0633\u0628\u0629 \u062A\u0642\u0633\u064A\u0645)\:
+ClustererPanel_VisualizeTree_GraphStringStartsWith_Text=Newick
+ClassifierPanel_SaveClassifier_Log_LogMessage_Text_Fourth=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0645\u0644 \u0645\u0646 \u0627\u0644\u0645\u0644\u0641 '
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Sixth=\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0627\u062A \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u062C\u0645\u064A\u0639 \u0645\u0627 \u0639\u062F\u0627 \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Seventh=\u0633\u0645\u0627\u062A\:   
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Eigth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+ClustererPanel_IgnoreBut_JButton_Text=\u062A\u062C\u0627\u0647\u0644 \u0627\u0644\u0633\u0645\u0627\u062A
+ClustererPanel_VisualizeClusterer_VisSepBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0641\u0635\u0644\u0629
+ClustererPanel_IgnoreBut_SetToolTipText_Text=\u062A\u062C\u0627\u0647\u0644 \u0627\u0644\u0633\u0645\u0627\u062A \u062E\u0644\u0627\u0644 \u0627\u0644\u062A\u062C\u0645\u064A\u0639
+ClassifierPanel_TrainBut_SetToolTipText_Text=\u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u064A  \u062A\u0645 \u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u0635\u0646\u0641 \u0639\u0644\u064A\u0647\u0627
+ClassifierPanel_SaveClassifier_OutBuffer_Text_TwentyFirst=\u0645\u0644\u0627\u062D\u0638\u0629 - \u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642 \u062B\u0643\u0648\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0646\u0628\u0624 \u0628\u0647\u0627
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Nineth=\u0645\u0644\u0627\u062D\u0638\u0629 - \u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642 \u062B\u0643\u0648\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0646\u0628\u0624 \u0628\u0647\u0627
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Fourteenth=\u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\:
+AttributeSelectionPanel_CVLab_JLabel_Text=\u0645\u0636\u0627\u0639\u0641\u0627\u062A
+PreprocessPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062D\u062F\u064A\u062F \u0645\u062D\u0645\u0644 \u0627\u0644\u0645\u0644\u0641 \u062A\u0644\u0642\u0627\u0626\u064A\u0627 \u060C \u064A\u0631\u062C\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0648\u0627\u062D\u062F .
+AttributeSelectionPanel_Visualize_VisSepBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0641\u0635\u0644\u0629
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtySixth=\=\=\= \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649  \u0642\u0633\u0645 \u0645\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631  \=\=\=\n
+AttributeSelectionPanel_CVBut_SetToolTipText_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+ClustererPanel_SetUpVisualizableInstances_JFrame_Text=\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyNineth=\u062B\u0627\u0646\u064A\u0629 \n \n
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TimeTakenFull=\n\u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0644\u0627\u0632\u0645 \u0644\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C (\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0643\u0627\u0645\u0644)\:
+ClassifierPanel_SaveClassifier_Name_Text_First=\u0645\u0646 \u0645\u0644\u0641 '
+ClassifierPanel_SetTestSet_SetTestFrame_JFrame_Text=\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631
+ClassifierPanel_OutputPerClassBut_JCheckBox_Text=Output per-class stats
+AttributeSelectionPanel_Visualize_VisMainBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Seventh=\n
+ExplorerDefaults_Main_Message_Text=\n \u0627\u0641\u062A\u0631\u0627\u0636\u0627\u062A \u0627\u0644\u0645\u062A\u0635\u0641\u062D  \:
+ClassifierPanel_ReEvaluateModel_Exception_Text_Fourth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F PMML \u0641\u064A \u0627\u0644\u062D\u0642\u0644\u0644 \u0627\u0644\u0645\u0642\u0635\u0648\u062F 
+ClustererPanel_PercentLab_JLabel_Text=%
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Nineth=...
+ClustererPanel_SetInstances_Type_AttributeRELATIONAL_Text=(Rel) 
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Fourteenth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClassifierPanel_PreserveOrderBut_SetToolTipText_Text=\u064A\u062D\u0627\u0641\u0638 \u0639\u0644\u0649 \u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0644\u062A\u0631\u062A\u064A\u0628 \u062A\u0642\u0633\u064A\u0645 \u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064A\u0629
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Third=\n
+AssociationsPanel_GetTabTitleToolTip_Text=\u0627\u0643\u062A\u0634\u0627\u0641 \u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0631\u0628\u0637
+AttributeSelectionPanel_SetInstances_AttributeRELATIONAL_Type_Text=(Rel) 
+PreprocessPanel_SetInstancesFromURL_Run_Log_StatusMessage_Text_First=\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 ...
+ClustererPanel_ReEvaluateModel_Run_Log_LogMessage_Text_Fifth=\u062A\u0648\u0642\u0641 \u0646\u0645\u0648\u0630\u062C \u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645
+PreprocessPanel_GenerateBut_SetToolTipText_Text=\u064A\u0648\u0644\u062F \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0635\u0637\u0646\u0627\u0639\u064A\u0629
+ClassifierPanel_StartClassifier_OutBuffer_Text_Thirteenth=\u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\:
+ClassifierPanel_OK_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+AttributeSelectionPanel_StartAttributeSelection_Run_Exception_Text_First=\u0639\u062F\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0623\u0643\u0628\u0631 \u0645\u0646 1
+ClassifierPanel_P2_JPanel_BorderFactoryCreateTitledBorder_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+ClustererPanel_ReEvaluateModel_Run_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 
+ClustererPanel_StopBut_JButton_Text=\u062A\u0648\u0642\u0641
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Fifth=\n
+ClustererPanel_ClassCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0633\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0639\u062A\u0645\u062F \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0627\u062A
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_TwentyFourth=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+AssociationsPanel_HistoryRightClickPopup_SaveOutput_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0645\u062E\u0632\u0646\u0629 
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Fourth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClassifierPanel_StartClassifier_OutBuffer_Text_Sixth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+ClassifierPanel_RandomSeedText_JTextField_Text=1
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Nineth=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0631\u0627\u0628\u0637 (\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0643\u0627\u0645\u0644) \=\=\=
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Fourth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A...
+AssociationsPanel_P1_JPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0631\u0627\u0628\u0637
+Explorer_LogPanel_LogMessage_Text_Fifth=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 \u0641\u064A 
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_First=\=\=\= \u0627\u0644\u062A\u0648\u0642\u0639 \u0628\u0646\u0627\u0621\u0627 \u0639\u0644\u0649 
+ClassifierPanel_VisualizeClassifierErrors_JF_JFrame_Text=\u0639\u0631\u0636 \u0628\u064A\u0627\u0646\u0627\u062A \u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+ClassifierPanel_StartClassifier_OutBuffer_Text_Second=\u0627\u0644\u0645\u062E\u0637\u0637\:
+AttributeSelectionPanel_Visualize_VisTrans_JMenuItem_Text_Second=\u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0635\u0631\u0629
+ClassifierPanel_ReEvaluateModel_Exception_Text_Second=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642\u064A\u0646
+ClustererPanel_StartClusterer_Run_Exception_Text_Sixth=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0646\u0641\u064A\u0630 \u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 
+PreprocessPanel_AttSummaryPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0633\u0645\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629
+ClassifierPanel_SaveClassifier_OutBuffer_Text_TwentyThird=\u0631\u0642\u0645 \u0627\u0644\u062D\u0627\u0644\u0629,    \u0627\u0644\u062D\u0642\u064A\u0642\u064A, \u0627\u0644\u0645\u062A\u0648\u0642\u0639, \u0627\u0644\u062E\u0637\u0623
+PreprocessPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Tenth=\n  \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \n
+AttributeSelectionPanel_SetInstances_AttributeNUMERIC_Type_Text=(Num)
+ClassifierPanel_MoreOptions_JButton_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u0623\u0643\u062B\u0631 ...
+ClustererPanel_SetTestBut_JButton_Text=\u062A\u0639\u064A\u064A\u0646 ...
+AttributeSelectionPanel_Visualize_RelationName_Text_First=AT\: 
+ClassifierPanel_StartClassifier_OutBuffer_Text_Twelveth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+ClassifierPanel_StopBut_SetToolTipText_Text=\u062A\u0648\u0642\u0641 \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u0635\u0646\u064A\u0641
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Nineteenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\n
+PreprocessPanel_SetInstancesFromDBQ_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\: \n
+PreprocessPanel_SaveWorkingInstancesToFileQ_JOptionPaneShowMessageDialog_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ClassifierPanel_StartClassifier_OutBuffer_Text_Twentyth=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0632\u0648\u062F\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062E\u062F\u0645\:
+Explorer_Main_Run_Error_Text_First=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+ClassifierPanel_CVBut_JRadioButton_Text=\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Seventeenth=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0642\u0633\u0645 \u0645\u0646  \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+ClustererPanel_VisualizeClusterer_SaveCluster_JOptionPaneShowMessageDialog_Text=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062D\u0641\u0638
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_First=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Nineth=\n
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Nineth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_Sixth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+PreprocessPanel_VisAllBut_JButton_Text=\u0639\u0631\u0636 \u062C\u0645\u064A\u0639
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Fifth=\n
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyFirst=\=\=\= \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \=\=\=
+ClassifierPanel_OutputModelBut_SetToolTipText_Text=Output the model obtained from the full training set
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Nineteenth=\u0633\u0645\u0627\u062A\:   
+PreprocessPanel_SetInstances_Run_Log_LogMessage_Text_Second=( 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text=\u0627\u0644\u0642\u064A\u0627\u0645 \u0628\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u064A\u0632\u0629 ...
+PreprocessPanel_ApplyFilterBut_SetToolTipText_Text=\u062A\u0637\u0628\u064A\u0642 \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u064A \u0625\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+Explorer_Main_Run_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+PreprocessPanel_SetInstances_Run_JOptionPaneShowMessageDialog_Text_Second=\u0627\u0644\u062D\u0627\u0644\u0627\u062A
+PreprocessPanel_SetInstancesFromDBQ_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyFifth=\n
+AssociationsPanel_SetInstances_AttributeNOMINAL_Text=(Nom) 
+DataGeneratorPanel_Execute_Log_LogMessage_Text_Second=\u0627\u0644\u0623\u0645\u0631\: 
+AttributeSelectionPanel_SetInstances_AttributeDATE_Type_Text=(\u062A\u0627\u0631\u064A\u062E)
+AssociationsPanel_StartAssociator_Run_Log_StatusMessage_Text_First=\u0627\u0644\u0625\u0646\u0634\u0627\u0621... 
+PreprocessPanel_SaveInstancesToFile_Run_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062D\u0641\u0638  \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_Third=\u060C \u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A
+ClassifierPanel_SetInstances_Type_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Sixth=\u0645\u0648\u0627\u0641\u0642
+ClustererPanel_VisualizeClusterer_SaveCluster_Log_LogMessage_Text=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u062D\u0641\u0648\u0638 (
+AssociationsPanel_HistoryRightClickPopup_VisMainBuffer_JPopupMenu_Text=\u0639\u0631\u0636 \u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_TwentyFirst=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631. \u0627\u0644\u0645\u0635\u0646\u0639\u0629. \u062A\u0645
+ClassifierPanel_P3_JPanel_BorderFactoryCreateTitledBorder_Text=\u0645\u062E\u0631\u062C\u0627\u062A \u0627\u0644\u0645\u0635\u0646\u0641
+ClassifierPanel_StorePredictionsBut_JCheckBox_Text=\u062A\u062E\u0632\u064A\u0646  \u0627\u0644\u062A\u0646\u0628\u0624\u0627\u062A \u0644\u0644\u062A\u0635\u0648\u064A\u0631
+AttributeSelectionPanel_SaveTransformedData_Filter_Text=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ARFF
+Explorer_LogPanel_StatusMessage_Text_First=\u0645\u0631\u062D\u0628\u0627 \u0628\u0643\u0645 \u0641\u064A \u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627
+ClustererPanel_P3_BorderFactoryCreateTitledBorder_Text=\u0645\u062E\u0631\u062C\u0627\u062A \u0627\u0644\u0645\u062C\u0645\u0639
+AttributeSelectionPanel_SaveTransformedData_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Fourteenth=\n  \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u062C\u0645\u064A\u0639 \n  \n 
+ClassifierPanel_SetCostsBut_JButton_Text=\u062A\u0639\u064A\u064A\u0646 ...
+PreprocessPanel_TryConverter_JOptionPaneShowMessageDialog_Text_First=\u0641\u0634\u0644 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 '
+AttributeSelectionPanel_SeedText_JTextField_Text=1
+ClassifierPanel_StartClassifier_OutBuffer_Text_Fourth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Fifteenth=\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062F\u0631\u0628 \u0639\u0644\u064A\u0647\u0627  \n
+PreprocessPanel_SetInstancesFromFile_Run_Log_StatusMessage_Text_Second=\u0627\u0644\u0645\u0644\u0641 '
+PreprocessPanel_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0625\u0632\u0627\u0644\u0629 \u0643\u0627\u0641\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0645\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \! \n
+ClassifierPanel_StartClassifier_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \=\=\=\n\n
+PreprocessPanel_SetInstancesFromDBQ_JOptionPaneShowMessageDialog_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+Explorer_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Third=\u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u0631\u0636\u064A\u0629 ...
+PreprocessPanel_SaveInstancesToFile_Run_Log_StatusMessage_Text_Second=\u0645\u0648\u0627\u0641\u0642
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Eighth=\n\n
+AssociationsPanel_Main_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Eleventh=\u062A\u0645 \u0627\u0644\u062A\u062C\u0627\u0647\u0644 \: \n
+ClustererPanel_StartClusterer_Run_Exception_Text_First=\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0646\u0633\u0628\u0629 \u0645\u0627 \u0628\u064A\u0646 0 \u0648 100
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyEighth=\u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0644\u0627\u0632\u0645 \u0644\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \: 
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Eighth=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyThird=\=\=\= \u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u0637\u0628\u0642\u064A\u0629 \u0644\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0635\u062D\u0629 \=\=\=\n
+ClassifierPanel_StartClassifier_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A  \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641
+AttributeSelectionPanel_StartAttributeSelection_Run_Transformed_SetRelationName_Text=AT\: 
+ClustererPanel_StartClusterer_Run_Log_LogMessage_Text_Fourth=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Nineth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+AttributeSelectionPanel_SetInstances_AttributeNOMINAL_Type_Text=(Nom)   
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Sixth=\n
+PreprocessPanel_OpenFileBut_JButton_Text=\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0641
+ClassifierPanel_Visualize_PluginMenuItemSetText_Text_First=(\u0646\u0633\u062E\u0629 \u0648\u064A\u0643\u0627 \u0642\u062F\u064A\u0645\u0629)
+ClassifierPanel_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+ClassifierPanel_StartClassifier_PrintPredictionsHeader_Text_First=\u062A\u0642\u0633\u064A\u0645 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+ClassifierPanel_ReEvaluateModel_Exception_Text_Fifth=\u0641\u064A \u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631\!
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Sixth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Seventh=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClustererPanel_VisualizeClusterer_VisClusts_JMenuItem_Text=\u0639\u0631\u0636 \u062A\u0639\u064A\u064A\u0646\u0627\u062A \u0627\u0644\u0645\u062C\u0645\u0639
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Eighth=\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u0645 \u0644\u0625\u0633\u062A\u062E\u062F\u0627\u0645\u0647 \u0641\u064A \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+ClassifierPanel_ReEvaluateModel_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Sixteenth=\u062A\u0642\u0633\u064A\u0645 
+AssociationsPanel_HistoryRightClickPopup_DeleteOutput_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062E\u0632\u0646\u0629
+AssociationsPanel_StartAssociator_Run_Log_StatusMessage_Text_Third=\u0645\u0648\u0627\u0641\u0642
+AttributeSelectionPanel_ClassCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0627\u0644\u0633\u0645\u0629 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0643\u0641\u0626\u0629
+AttributeSelectionPanel_StartBut_SetToolTipText_Text=\u0627\u0628\u062F\u0623 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0629
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Seventh=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+PreprocessPanel_SetInstancesFromDBQ_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClustererPanel_ReEvaluateModel_Run_Log_LogMessage_Text_Second=) \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Thirteenth=\n
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_First=\u0623\u062F\u062E\u0644 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0635\u062F\u0631
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_TwentyThird=\u0645\u0648\u0627\u0641\u0642
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Tenth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+AssociationsPanel_SetInstances_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+ClassifierPanel_History_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C (\u0627\u0646\u0642\u0631 \u0628\u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0644\u062E\u064A\u0627\u0631\u0627\u062A)
+PreprocessPanel_SetInstances_Run_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0639\u062F\u0627\u062F \u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0642\u0627\u0639\u062F\u0629\: \n
+PreprocessPanel_TryConverter_JOptionPaneShowMessageDialog_Text_Third=\u0627\u0644\u0633\u0628\u0628\: \n
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Twelveth=\n
+ClassifierPanel_StartClassifier_OutBuffer_Text_Seventh=\n
+AssociationsPanel_SaveBuffer_Log_LogMessage_Text=\u062A\u0645 \u0627\u0644\u062D\u0641\u0638 \u0628\u0646\u062C\u0627\u062D.
+ClassifierPanel_StartClassifier_OutBuffer_Text_Eighteenth=\u062A\u062F\u0631\u064A\u0628 %\u060C \u0648\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0628\u0627\u0642\u064A \n
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Eighth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+ClustererPanel_StartClusterer_Run_Log_LogMessage_Text_Second=\u0627\u0644\u0623\u0645\u0631\: 
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Second=.\u0647\u0644 \u062A\u0631\u063A\u0628 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645  \u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u0645\u0631\u062A\u0628\u061F 
+PreprocessPanel_JOptionPaneShowMessageDialog_Text_Third=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ClassifierPanel_PercentBut_JRadioButton_Text=\u0646\u0633\u0628\u0629 \u0627\u0644\u0627\u0646\u0642\u0633\u0627\u0645
+ClustererPanel_VisualizeClusterer_SaveCluster_Log_StatusMessage_Text=\u0645\u0648\u0627\u0641\u0642
+ClassifierPanel_StartClassifier_Exception_Text_Fifth=\u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+ClassifierPanel_StartClassifier_OutBuffer_Text_Third=\n
+ClassifierPanel_PercentBut_SetToolTipText_Text=\u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0645\u0626\u0648\u064A\u0629 \u0645\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0639\u0644\u0649 \u0645\u0627 \u062A\u0628\u0642\u0649
+PreprocessPanel_Undo_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0631\u0627\u062C\u0639
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Eleventh=\n  \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0645\u0635\u0646\u0641 \n  \n 
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Second=' \u063A\u064A\u0631 \u0645\u0639\u0631\u0641 \u0639\u0644\u0649 \u0623\u0646\u0647 '
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Seventh=\u0633\u0645\u0627\u062A\:   
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Fifth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0631\u0627\u0628\u0637
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_First=\u0627\u0644\u0645\u0644\u0641 '
+PreprocessPanel_SetInstancesFromFile_Run_Log_StatusMessage_Text_Fourth=' \u0645\u0644\u0641.
+AssociationsPanel_P3_JPanel_BorderFactoryCreateTitledBorder_Text=\u0645\u062E\u0631\u062C\u0627\u062A \u0627\u0644\u0631\u0627\u0628\u0637
+ClustererPanel_StartClusterer_Run_Exception_Text_Third=\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0641\u0642\u064A\u0646
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Twelveth=\n
+ClassifierPanel_SourceCodeClass_JTextField_Text=\u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627
+ClustererPanel_ReEvaluateModel_Run_Log_StatusMessage_Text_Second=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+PreprocessPanel_UndoBut_JButton_Text=\u062A\u0631\u0627\u062C\u0639
+PreprocessPanel_ShowGeneratedInstances_SaveButton_JOptionPaneShowMessageDialog_Text_Second='\!
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Twentyth=\u062C\u0645\u0644 \u0644\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Sixth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0646\u0633\u062E \u0627\u0644\u0645\u0635\u0646\u0641\:
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Fifteenth=\u0628\u0646\u0627\u0621 \u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0645\u0642\u0633\u0645 (
+ClustererPanel_Main_Error_Text_First=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+ClassifierPanel_SaveClassifier_Log_LogMessage_Text_Fifth='
+ClustererPanel_VisualizeClusterer_LoadClusterer_JOptionPaneShowMessageDialog_Text=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Second=\u062C\u0639\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0639\u0634\u0648\u0627\u0626\u064A\u0629
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Seventh=\u0625\u0646\u062A\u0647\u0649 
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Eighth=\u0633\u0645\u0627\u062A\:   
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Fifth=\u0647\u0644 \u062A\u0631\u063A\u0628 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645  GreedyStepwise  \u061F  (\u064A\u0645\u0643\u0646\u0643 \u062F\u0627\u0626\u0645\u0627 \u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0637\u0631\u064A\u0642\u0629 \u0645\u062E\u062A\u0644\u0641\u0629 \u0641\u064A\u0645\u0627 \u0628\u0639\u062F )
+ClustererPanel_StartClusterer_Run_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639\:\n 
+ClassifierPanel_SaveClassifier_OutBuffer_Text_TwentySecond=\=\=\= \u0627\u0644\u062A\u0648\u0642\u0639 \u0628\u0646\u0627\u0621\u0627 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \=\=\=\n\n
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Sixth=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0642\u0633\u0645 \u0645\u0646  \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Sixth=\u062C\u0639\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0639\u0634\u0648\u0627\u0626\u064A\u0629
+AttributeSelectionPanel_Visualize_RelationName_Text_Second=AT\: 
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Eighth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Eleventh=\u062A\u0646\u0628\u064A\u0647\!
+ClassifierPanel_ReEvaluateModel_Log_StatusMessage_Text_Fifth=\u0645\u0648\u0627\u0641\u0642
+ClassifierPanel_GetTabTitleToolTip_Text=\u062A\u0635\u0646\u064A\u0641 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+ClassifierPanel_StartClassifier_OutBuffer_Text_Tenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+PreprocessPanel_SetInstancesFromURLQ_JOptionPaneShowMessageDialog_Text_Third=\u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0645\u0639 URL\: \n 
+AttributeSelectionPanel_Visualize_SaveTrans_JMenuItem_Text_Second=\u062D\u0641\u0638 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0635\u0631\u0629 ...
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Eigth=\u062A\u0646\u0628\u064A\u0647\!
+AssociationsPanel_StartAssociator_Run_Log_LogMessage_Text_Fourth=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Seventeenth=\u062A\u062F\u0631\u064A\u0628 %\u060C \u0648\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0628\u0627\u0642\u064A \n
+ClassifierPanel_StartClassifier_OutBuffer_Text_FourtyFirst=\n
+ClustererPanel_SetInstances_Type_AttributeSTRING_Text=(Str) 
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Fourteenth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0648\u0632\u064A\u0639  \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629
+DataGeneratorPanel_Execute_JOptionPaneShowMessageDialog_Text_Second=\u062E\u0637\u0623
+PreprocessPanel_ApplyFilter_Run_IllegalArgumentException_Text=\u0641\u0626\u0629 ( \u0644\u0648\u0646 ) \u062A\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0623\u0646 \u064A\u062A\u0645 \u062A\u0639\u064A\u064A\u0646\u0627 \u0625\u0644\u0649 \u0645\u0635\u0641\u064A \u062A\u062D\u062A \u0627\u0644\u0625\u0634\u0631\u0627\u0641.
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_Sixth=\u062A\u0645 \u0641\u0637\u0639\u0647\u0627
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Twelveth=...
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_First=\n  \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \n  \n 
+ClassifierPanel_LoadClassifier_Log_StatusMessage_Text_Second=\u0645\u0648\u0627\u0641\u0642
+PreprocessPanel_ApplyFilterBut_JButton_Text=\u062A\u0637\u0628\u064A\u0642
+ClustererPanel_ReEvaluateModel_Run_Log_LogMessage_Text_Fourth=\u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621 \u0645\u0646 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0642\u064A\u064A\u0645
+ClustererPanel_ClassesToClustersBut_SetToolTipText_Text=\u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639 \u0645\u0639 \u0627\u0644\u0623\u062E\u0630 \u0628\u0639\u064A\u0646 \u0627\u0644\u0625\u0639\u062A\u0628\u0627\u0631 \u0627\u0644\u0641\u0626\u0629
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Twentyth=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 ...
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0646\u0648\u0630\u062C \=\=\=\n\n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Fifteenth=\n
+ClustererPanel_PercentText_JTextField_Text=66
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Sixteenth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A)...
+ClustererPanel_VisualizeClusterer_SaveOutput_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0645\u062E\u0632\u0646\u0629 
+AssociationsPanel_SetInstances_AttributeRELATIONAL_Text=(Rel) 
+ClassifierPanel_Visualize_LoadModel_JMenuItem_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C
+ClassifierPanel_Visualize_VisSepBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0641\u0635\u0644\u0629
+ClassifierPanel_CVBut_SetToolTipText_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Sixth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+ClustererPanel_ReEvaluateModel_Run_Log_StatusMessage_Text_First=\u0627\u0644\u0625\u0646\u0634\u0627\u0621... 
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Third=' \u0645\u0644\u0641.\n
+AttributeSelectionPanel_Result_JOptionPaneShowConfirmDialog_Text_Fourth=\u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0623\u0633\u0644\u0648\u0628 \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u0630\u064A \u064A\u0633\u062A\u0643\u0634\u0641 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0633\u0645\u0627\u062A (\u0645\u062B\u0644 GreedyStepwise) \u0645\u0646 \u0627\u062C\u0644 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \n
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Nineth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Second=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0632\u0648\u062F\u0629
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentySecond=\u062A\u0642\u064A\u064A\u0645 \u0645\u0635\u0641\u0648\u0641\u0629  \u0627\u0644\u062A\u0643\u0644\u0641\u0629\: \n
+ClassifierPanel_VisCost_JMenu_Text=\u062A\u0635\u0648\u064A\u0631 \u0645\u0646\u062D\u0646\u0649 \u0627\u0644\u062A\u0643\u0644\u0641\u0629
+AssociationsPanel_StartAssociator_Run_Log_LogMessage_Text_Second=\u0627\u0644\u0623\u0645\u0631\: 
+PreprocessPanel_SetInstancesFromFile_Run_JOptionPaneShowOptionDialog_Text_Fourth=\u0627\u0644\u0633\u0628\u0628\: \n
+PreprocessPanel_ShowGeneratedInstances_SaveButton_JButton_Text=\u062D\u0641\u0638
+ClassifierPanel_PreserveOrderBut_JCheckBox_Text=\u00D9\u00AA \u0627\u0644\u062D\u0641\u0627\u0638 \u0639\u0644\u0649 \u0627\u0644\u062A\u0631\u062A\u064A\u0628  \u0644\u0644\u0641\u0635\u0644
+ClassifierPanel_OutputPredictionsTextBut_SetToolTipText_Text=\u062A\u0634\u0645\u0644 \u0627\u0644\u062A\u0648\u0642\u0639\u0627\u062A \u0641\u064A \u0645\u062E\u0632\u062A \u0627\u0644\u0646\u062A\u0627\u0626\u062C  
+ClustererPanel_VisualizeClusterer_VisMainBuffer_JMenuItem_Text=\u0639\u0631\u0636 \u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TwentyFirst=\n
+AttributeSelectionPanel_SaveTransformedData_JOptionPaneShowMessageDialog_Text_Second=\u062E\u0637\u0623
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_Nineth=\u0648\u0636\u0639 \u0627\u0644\u062A\u0642\u064A\u064A\u0645\:
+DataGeneratorPanel_Execute_Log_LogMessage_Text_First=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+PreprocessPanel_SaveBut_JButton_Text=\u062D\u0641\u0638 ...
+ClustererPanel_ReEvaluateModel_Run_Log_StatusMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u062C\u0645\u0639
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Second=\u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+ClassifierPanel_SaveClassifier_Name_Text_Second='
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Sixteenth=\u062D\u0627\u0644\u0627\u062A\: \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 (\u0628\u0639\u062F). \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u062A\u062F\u0631\u064A\u062C\u064A\u0629
+AttributeSelectionPanel_SaveTransformedData_Log_LogMessage_Text=\u0645\u0643\u0644\u0629 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\:
+ClassifierPanel_ReEvaluateModel_Log_LogMessage_Text_Second=) \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+ClustererPanel_TestSplitBut_SetToolTipText_Text=\u062A\u062C\u0645\u064A\u0639 \u0645\u062C\u0645\u0648\u0639\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062D\u062F\u062F\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Fourth=\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u0645 \u0644\u0625\u0633\u062A\u062E\u062F\u0627\u0645\u0647 \u0641\u064A \u0627\u0644\u0623\u0636\u0639\u0627\u0641
+ClustererPanel_StartBut_SetToolTipText_Text=\u0627\u0628\u062F\u0623 \u0627\u0644\u062A\u062C\u0645\u064A\u0639
+AttributeSelectionPanel_CVBut_JRadioButton_Text=\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A
+ClassifierPanel_StartClassifier_OutBuffer_Text_Thirtyth=\n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Eighth=\n
+ClassifierPanel_Visualize_SaveOutput_JMenuItem_Text=\u062D\u0641\u0638 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0645\u062E\u0632\u0646\u0629 
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtySeventh=\n
+AttributeSelectionPanel_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+ClassifierPanel_SaveClassifier_OutBuffer_Text_TwentyFourth=\u060C \u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A
+ClassifierPanel_LoadClassifier_JOptionPaneShowMessageDialog_Text=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Thirteenth=[\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u0630\u0648\u0641\u0629]
+PreprocessPanel_GenerateInstances_Run_ShowOutputCheckBox_JCheckBox_Text=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0643\u0646\u0635\u060C \u0628\u0645\u0627 \u0641\u064A \u0630\u0644\u0643  \u0627\u0644\u062A\u0639\u0644\u064A\u0642\u0627\u062A
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Third=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClassifierPanel_Visualize_VisErrors_JMenuItem_Text=\u0639\u0631\u0636 \u0623\u062E\u0637\u0627\u0621 \u0627\u0644\u0645\u0635\u0646\u0641
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0646\u0633\u062E \u0627\u0644\u0645\u0635\u0646\u0641\:
+ClustererPanel_TestSplitBut_JRadioButton_Text=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0648\u0632\u062F\u0629
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Text_First=\u0627\u0644\u0625\u0646\u0634\u0627\u0621... 
+ClassifierPanel_SetInstances_Type_AttributeNOMINAL_Text=(Nom) 
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Third=\n
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Second=\u0627\u0644\u0645\u062E\u0637\u0637\:
+ClassifierPanel_ClassCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0627\u0644\u0633\u0645\u0629 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0643\u0641\u0626\u0629
+PreprocessPanel_SetInstancesFromDB_Run_Log_StatusMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0646\u0641\u064A\u0630 \u0623\u0645\u0631 \u0642\u0627\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_First=\u0627\u0644\u0625\u0646\u0634\u0627\u0621... 
+PreprocessPanel_SetInstancesFromURL_Run_Log_StatusMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u0642\u0631\u0627\u0621\u0629
+ClassifierPanel_SaveClassifier_JOptionPaneShowMessageDialog_Text=\u0645\u0648\u0627\u0641\u0642
+AttributeSelectionPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0633\u0645\u0627\u062A \u062A\u062D\u062F\u064A\u062F
+VisualizePanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Thirteenth=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0625\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0632\u0648\u062F\u0629
+PreprocessPanel_AttStuffHolderPanel_BorderFactoryCreateTitledBorder_Text=\u0633\u0645\u0627\u062A
+PreprocessPanel_ApplyFilter_Run_JOptionPaneShowMessageDialog_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+PreprocessPanel_OpenDBBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ClustererPanel_ReEvaluateModel_Run_Log_StatusMessage_Text_Third=\u0645\u0648\u0627\u0641\u0642
+ClassifierPanel_StopBut_JButton_Text=\u062A\u0648\u0642\u0641
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Sixth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+ClassifierPanel_StartClassifier_OutBuffer_Text_ThirtyNineth=\n
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_First=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+AttributeSelectionPanel_Visualize_VisTrans_JMenuItem_Text_First=\u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062D\u0648\u0644\u0629
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_TwentyThird=\=\=\= \u0628\u0646\u0627\u0621 \u0646\u0645\u0648\u0630\u062C \u0648\u0627\u0644\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0642\u0633\u0645 \u0645\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631  \=\=\=
+PreprocessPanel_ApplyFilter_Run_JOptionPaneShowMessageDialog_Text_Second=\u062A\u0637\u0628\u064A\u0642  \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629 
+AttributeSelectionPanel_GetTabTitleToolTip_Text=\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0627\u0644\u0645\u0647\u0645\u0629
+AssociationsPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0631\u0627\u0628\u0637
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Fourth=\n
+ClassifierPanel_SaveClassifier_OutBuffer_Text_Fifth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClustererPanel_ReEvaluateModel_Run_OutBuffer_Text_Tenth=\n
+ClustererPanel_History_BorderFactoryCreateTitledBorder_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0646\u062A\u0627\u0626\u062C (\u0627\u0646\u0642\u0631 \u0628\u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0644\u062E\u064A\u0627\u0631\u0627\u062A)
+DataGeneratorPanel_Execute_Log_LogMessage_Text_Third=\u0625\u0646\u062A\u0647\u0649 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_StatusMessage_Text_Ninth=\u0645\u0631\u0627\u062C\u0639\u0629 \u0633\u062C\u0644 \u0627\u0644\u0623\u062E\u0637\u0627\u0621
+ClassifierPanel_LoadClassifier_Exception_Text=\u0627\u0644\u0646\u0645\u0648\u0630\u062C PMML \u0644\u064A\u0633 \u0646\u0645\u0648\u0630\u062C \u062A\u0635\u0646\u064A\u0641 \u0648\u0644\u0627 \u0646\u0645\u0648\u0630\u062C \u062A\u0631\u0627\u062C\u0639\u064A\!
+ClustererPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0645\u062C\u0645\u0639
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentyFourth=\n
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Second=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641\:     
+PreprocessPanel_GenerateInstances_Run_GenerateButton_JButton_Text=\u062A\u0648\u0644\u064A\u062F
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Tenth=\n
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Fourth=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0648\u0632\u064A\u0639  \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629
+ClassifierPanel_OutputPredictionsTextBut_JCheckBox_Text=\u062A\u0648\u0642\u0639\u0627\u062A \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+PreprocessPanel_SetInstancesFromDB_Run_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+AttributeSelectionPanel_StartAttributeSelection_Run_Exception_Text_Second=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0646\u0641\u064A\u0630 \u0648\u0636\u0639 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 
+ClassifierPanel_Visualize_VMC_SetROCString_Text_First=(\u0645\u0646\u0637\u0642\u0629 \u062A\u062D\u062A \u0645\u0646\u062D\u0646\u0649 ROC \= 
+PreprocessPanel_InstSummaryPanel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629
+AttributeSelectionPanel_StartAttributeSelection_Run_OutBuffer_Text_First=\=\=\= \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \=\=\=\n\n
+AttributeSelectionPanel_P1_BorderFactoryCreateTitledBorder_Text=\u0645\u0642\u064A\u0645 \u0627\u0644\u0633\u0645\u0629 
+ClassifierPanel_JD_JDialog_Text=\u062E\u064A\u0627\u0631\u0627\u062A \u062A\u0642\u064A\u064A\u0645 \u0627\u0644\u0645\u0635\u0646\u0641
+PreprocessPanel_SetInstancesFromDB_Run_Log_StatusMessage_Text_First=\u062A\u062A\u0645 \u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A  ...
+ClustererPanel_VisualizeClusterer_LoadClusterer_OutBuffer_Text_Seventh=\n
+ClustererPanel_SetUpVisualizableInstances_ClustVals_Text=\u0645\u062C\u0645\u0648\u0639\u0629
+PreprocessPanel_RemoveButton_SetToolTipText_Text=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u0645\u062D\u062F\u062F\u0629.
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Fourth=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628. \u062A\u0645
+ClustererPanel_VisualizeClusterer_VisTree_JMenuItem_Text=\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629
+PreprocessPanel_TryConverter_Log_StatusMessage_Text=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+AssociationsPanel_SetInstances_AttributeNUMERIC_Text=(Num)
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Third=\u0627\u0644\u0623\u0645\u0631\: 
+ClassifierPanel_ReEvaluateModel_Log_LogMessage_Text_Fourth=\u062A\u0648\u0642\u0641 \u0646\u0645\u0648\u0630\u062C \u0625\u0639\u0627\u062F\u0629 \u062A\u0642\u064A\u064A\u0645
+PreprocessPanel_OpenFileBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 \u0645\u0644\u0641
+ClassifierPanel_SetUpVisualizableInstances_PredictedClass_Attribute_Text_Second=\u0645\u062A\u0646\u0628\u0623
+PreprocessPanel_Main_JFRame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629
+ClustererPanel_VisualizeClusterer_DeleteOutput_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062E\u0632\u0646\u0629
+ClustererPanel_StartClusterer_Run_OutBuffer_Text_Sixth=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+DataGeneratorPanel_Execute_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A 
+ClassifierPanel_PrintPredictionsHeader_OutBuffer_Text_First_Alpha=\=\=\=\n\n
+PreprocessPanel_OpenURLBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0645\u062B\u064A\u0644\u0627\u062A \u0645\u0646 \u0627\u0644\u0631\u0627\u0628\u0637
+ClustererPanel_StartClusterer_Run_Log_StatusMessage_Third=\u062A\u062C\u0645\u064A\u0639 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+AttributeSelectionPanel_SetInstances_AttributeDEFAULT_Type_Text=(???) 
+AttributeSelectionPanel_Visualize_DeleteOutput_JMenuItem_Text=\u062D\u0630\u0641 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0645\u062E\u0632\u0646\u0629
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Third=\u062A\u0642\u064A\u064A\u0645 \u0639\u0644\u0649 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628 ...
+ClassifierPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0645\u0635\u0646\u0641
+ClassifierPanel_StartClassifier_Log_StatusMessage_Text_Seventh=\u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u0631\u0636\u064A\u0629 ...
+ClassifierPanel_OutputEntropyBut_SetToolTipText_Text=Output entropy-based evaluation measures
+ClassifierPanel_StartClassifier_OutBuffer_Text_TwentySixth=\=\=\= \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062A\u0635\u0646\u064A\u0641 (\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062A\u062F\u0631\u064A\u0628 \u0627\u0644\u0643\u0627\u0645\u0644) \=\=\=
+PreprocessPanel_ApplyFilter_Run_JOptionPaneShowMessageDialog_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+PreprocessPanel_ApplyFilter_Run_Log_LogMessage_Text_Second=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:
+AssociationsPanel_StartAssociator_Run_OutBuffer_Text_Fourth=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+ClassifierPanel_StartClassifier_Log_LogMessage_Text_Second=\u062A\u0645 \u0627\u0644\u0628\u062F\u0623 
+ClustererPanel_StartBut_StopBut_Text=\u062A\u0648\u0642\u0641 \u0627\u0644\u0645\u062C\u0645\u0639 \u0627\u0644\u0645\u0634\u063A\u0644
+PreprocessPanel_SetInstances_Run_Log_StatusMessage_Text_First=\u0645\u0648\u0627\u0641\u0642
+ClustererPanel_SetInstances_Type_AttributeNOMINAL_Text=(Nom) 
+AttributeSelectionPanel_StartAttributeSelection_Run_Log_LogMessage_Text_Third=\u0623\u0645\u0631 \u0627\u0644\u062A\u0635\u0641\u064A\u0629\:  
+AttributeSelectionPanel_Visualize_VisTrans_JMenuItem_Text_Third=\u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u062D\u0648\u0644\u0629
+ClassifierPanel_SetCostsFrame_SetTitle_Text=\u0645\u062D\u0631\u0631 \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u0643\u0627\u0644\u064A\u0641
+AttributeSelectionPanel_StopBut_JButton_Text=\u062A\u0648\u0642\u0641
+ClustererPanel_SetInstances_Type_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+AssociationsPanel_SetInstances_AttributeDEFAULT_Text=(???) 
+ClassifierPanel_CVText_JTextField_Text=10
diff --git a/src/main/java/weka/gui/graphvisualizer/messages/messages_ar.properties b/src/main/java/weka/gui/graphvisualizer/messages/messages_ar.properties
new file mode 100644
index 0000000..bbb4025
--- /dev/null
+++ b/src/main/java/weka/gui/graphvisualizer/messages/messages_ar.properties
@@ -0,0 +1,99 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+DotParser_EdgeAttrib_Error_Text_First=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_JCbCustomNodeSize_JCheckBox_Text=\u062A\u062E\u0635\u064A\u0635 \u062D\u062C\u0645 \u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0621 
+DotParser_Stmt_Error_Text_Second=\u0641\u064A stmt
+GraphVisualizer_JOptionPaneShowMessageDialog_Text_Third=\u062A\u0645 \u0625\u062F\u062E\u0627\u0644 \u0642\u064A\u0645\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\u0629 \u0644\u0637\u0648\u0644 \u0627\u0644\u0639\u0642\u062F\u0629
+DotParser_Graph_Error_Text_Third=\u062E\u0637\u0623 .\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647 \u0627\u0644\u0631\u0633\u0648\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A\u0629 \u063A\u064A\u0631 \u0627\u0644\u0645\u0648\u062C\u0647\u0629 
+HierarchicalBCEngine_MakeProperHierarchy_Progress_SetString_Text_Second=\u062A\u0639\u064A\u064A\u0646 \u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0625\u0644\u0649 \u0627\u0644\u0639\u0642\u062F
+GraphVisualizer_Error_Text_Second=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 zoomin.gif  \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A weka.gui.graphvisualizer.Graph
+HierarchicalBCEngine_RemoveLayoutCompleteEventListener_Error_Text_First=layoutCompleteListener to be remove not present
+HierarchicalBCEngine_IndexOfElementInLevel_Exception_Text_First=\u062E\u0637\u0623\: \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631
+HierarchicalBCEngine_LayoutGraph_Progress_SetString_Text_Fourth=\u0627\u0643\u062A\u0645\u0627\u0644 \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+GraphVisualizer_JBtZoomIn_SetToolTipText_Text=\u062A\u0643\u0628\u064A\u0631
+BIFParser_Parse_Outcome_Text_Second=]
+GraphVisualizer_GraphVisualizerMouseListener_MouseClicked_Error_Text_First=\u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u0627 \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646 (
+DotParser_Graph_Error_Text_Fourth=\u062E\u0637\u0623\: \u0627\u0644\u0645\u062A\u0648\u0642\u0639 \u0648\u062C\u0648\u062F \u0631\u0633\u0645 \u0628\u064A\u0627\u0646\u064A \u0641\u064A \u0633\u0637\u0631 
+DotParser_EdgeAttrib_Error_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0644\u0648\u0646 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_GetToolTipText_Text=(\u0627\u0646\u0642\u0631 \u0644\u0639\u0631\u0636 \u062C\u062F\u0648\u0644 \u0627\u0644\u0625\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u0648\u0632\u0639\u0629)
+DotParser_Stmt_Error_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0633\u0637\u0631 \u0631\u0642\u0645 
+HierarchicalBCEngine_JRbPriorityLayout_JRadioButton_Text=\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629
+GraphVisualizer_JOptionPaneShowMessageDialog_Text_First=\u062A\u0645 \u0625\u062F\u062E\u0627\u0644 \u0642\u064A\u0645\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\u0629 \u0644\u0639\u0631\u0636 \u0627\u0644\u0639\u0642\u062F\u0629
+DotParser_Graph_Error_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0633\u0637\u0631 
+HierarchicalBCEngine_Crossings_Exception_Text_Sixth=\u0627\u0644\u0630\u064A  \u0647\u0648 \:
+DotParser_NodeStmt_Error_Text_Second=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0641\u064A \u0633\u0637\u0631
+HierarchicalBCEngine_Crossings_Exception_Text_Fifth=\u0645\u0633\u062A\u0648\u064A\u0627\u062A [I +1 ] [ lidx ] \:
+HierarchicalBCEngine_JRbTopdown_JRadioButton_Text=\u0623\u0639\u0644\u0649 \u0625\u0644\u0649 \u0623\u0633\u0641\u0644
+GraphVisualizer_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+DotParser_NodeStmt_Error_Text_Third=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0644\u0648\u0646 \u0641\u064A \u0633\u0637\u0631
+HierarchicalBCEngine_Crossings_Exception_Text_Eighth=lower.first\: 
+GraphVisualizer_JBtExtraControls_SetToolTipText_Text=\u0625\u0638\u0647\u0627\u0631 / \u0625\u062E\u0641\u0627\u0621 \u0636\u0648\u0627\u0628\u0637 \u0627\u0636\u0627\u0641\u064A\u0629
+GraphVisualizer_FC_SetDialogTitle_Text=\u062D\u0641\u0638 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0643\u0645\u0627
+DotParser_EdgeAttrib_Error_Text_Fifth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0646\u0645\u0637 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_JOptionPaneShowMessageDialog_Text_Second=\u062E\u0637\u0623
+DotParser_Stmt_Error_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0633\u0637\u0631 \u0631\u0642\u0645 
+HierarchicalBCEngine_MyList_Remove_Error_Text_Second=\u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u063A\u064A \u0627\u0644\u0642\u0627\u0626\u0645\u0629
+GraphVisualizer_JLbNodeHeight_JLabel_Text=\u0627\u0631\u062A\u0641\u0627\u0639
+HierarchicalBCEngine_MyList_Remove_Error_Text_First=\u0639\u0646\u0635\u0631 
+HierarchicalBCEngine_Crossings_Exception_Text_Fourth=upper.first\: 
+GraphVisualizer_EF1_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A DOT
+DotParser_EdgeStmt_Error_Text_Fourth=\u0641\u064A edgeStmt
+HierarchicalBCEngine_PrintMatrices_Text_Second=\u0641\u064A \u0627\u0644\u0646\u0647\u0627\u064A\u0629 i\: 
+GraphVisualizer_JLbNodeWidth_JLabel_Text=\u0639\u0631\u0636
+HierarchicalBCEngine_Crossings_Exception_Text_Seventh=\u0645\u0624\u0642\u0646\u0627\: 
+DotParser_NodeStmt_Error_Text_First=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0641\u064A \u0633\u0637\u0631
+BIFParser_Parse_Outcome_Text_First=\u0627\u0644\u0646\u062A\u064A\u062C\u0629 [
+DotParser_EdgeAttrib_Text=\u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0645\u0639\u062B\u0648\u0631 \u0639\u0644\u064A\u0647\u0627
+BIFParser_Parse_BIFFormatException_Text_Third=\u0627\u0644\u062C\u062F\u0648\u0644 \u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0644\u0640
+DotParser_Stmt_Error_Text_Fourth=\u0641\u064A stmtException
+HierarchicalBCEngine_MakeProperHierarchy_Progress_SetString_Text_Third=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0641\u062C\u0648\u0627\u062A \u0639\u0646 \u0637\u0631\u064A\u0642 \u0625\u0636\u0627\u0641\u0629  \u0642\u064A\u0645 \u0648\u0647\u0645\u064A\u0629
+HierarchicalBCEngine_PrintMatrices_Text_Third=levels.length\: 
+BIFParser_Parse_BIFFormatException_Text_Second=\u064A\u0648\u062C\u062F \u0623\u0643\u062B\u0631 \u0645\u0646 \u0639\u0644\u0627\u0645\u0629 \u0625\u0633\u0645 \u0644\u0644\u0645\u062A\u063A\u064A\u0631 \u0631\u0642\u0645 
+GraphVisualizer_Error_Text_Fourth=extra.gif \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u064A\u0627 \u0644\u0640  weka.gui.graphvisualizer.Graph
+BIFParser_Parse_BIFFormatException_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0634\u0628\u0643\u0629
+HierarchicalBCEngine_JP2_BorderFactoryCreateTitledBorder_Text=\u0623\u0633\u0644\u0648\u0628 \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+GraphVisualizer_Main_Jd_JDialog_Text=\u062C\u062F\u0648\u0644 \u062A\u0648\u0632\u064A\u0639 \u0627\u0644\u0625\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0644\u0640 
+DotParser_EdgeStmt_Error_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0633\u0637\u0631 
+GraphVisualizer_Main_JFrame_Text=\u0645\u0635\u0648\u0631 \u0627\u0644\u0631\u0633\u0645 \u0628\u064A\u0627\u0646\u064A 
+HierarchicalBCEngine_JCbEdgeConcentration_JCheckBox_Text=\u0645\u0639 \u062A\u0631\u0643\u064A\u0632 \u0627\u0644\u062D\u0627\u0641\u0629
+DotParser_EdgeAttrib_Error_Text_Fourth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0646\u0645\u0637 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_JBtLayout_JButton_Text=\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+HierarchicalBCEngine_MakeProperHierarchy_Progress_SetString_Text_First=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u062F\u0648\u0631\u0627\u062A
+HierarchicalBCEngine_PrintMatrices_Text_First=levels.length\:  
+HierarchicalBCEngine_JP1_JPanel_BorderFactoryCreateTitledBorder_Text=\u0645\u0639 \u062A\u0631\u0643\u064A\u0632 \u0627\u0644\u062D\u0627\u0641\u0629
+GraphVisualizer_GraphVisualizerMouseListener_MouseClicked_Error_Text_Second=) \u0644\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636 \u0627\u0644\u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A
+BIFParser_Parse_BIFFormatException_Text_Second_Alpha=\u064A\u0648\u062C\u062F \u0623\u0643\u062B\u0631 \u0645\u0646 \u062C\u062F\u0648\u0644 \u0625\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0644\u0640 
+DotParser_NodeStmt_Error_Text_Sixth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0646\u0645\u0637 \u0641\u064A \u0633\u0637\u0631
+HierarchicalBCEngine_LayoutGraph_Progress_SetString_Text_Second=\u062A\u0642\u0644\u064A\u0644 \u0627\u0644\u062A\u0642\u0627\u0637\u0639 \: \u0646\u062C\u062D
+BIFParser_Parse_Exception_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062F\u062E\u0644\u0627\u062A 
+DotParser_NodeStmt_Error_Text_Fifth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0646\u0645\u0637 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_JBtSave_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+DotParser_NodeStmt_Error_Text_Fourth=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0644\u0648\u0646 \u0641\u064A \u0633\u0637\u0631
+GraphVisualizer_Error_Text_Third=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 zoomout.gif  \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A  weka.gui.graphvisualizer.Graph
+DotParser_Graph_Error_Text_Second=\u062A\u0645 \u062A\u062C\u0627\u0647\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064A\u0632
+HierarchicalBCEngine_MyList_Add_Error_Text_Second=\u0644\u0627 \u064A\u0646\u0628\u063A\u064A \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062E\u0637\u0623 \u0647\u0646\u0627. \u062A\u062D\u0642\u0642  \u0631\u0645\u0632 \u0642\u0627\u0626\u0645\u062A\u064A 
+GraphVisualizer_ReadBIF_Error_Text_Second=\u062E\u0637\u0623 \u0641\u064A \u062A\u0646\u0633\u064A\u0642 BIF
+GraphVisualizer_P_BorderFactoryCreateTitledBorder_Text=\u0636\u0648\u0627\u0628\u0637 \u0627\u0636\u0627\u0641\u064A\u0629
+GraphVisualizer_ReadBIF_Error_Text_First=\u062E\u0637\u0623 \u0641\u064A \u062A\u0646\u0633\u064A\u0642 BIF
+DotParser_EdgeStmt_Error_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0633\u0637\u0631 
+HierarchicalBCEngine_IndexOfElementInLevel_Exception_Text_Second=\u0641\u064A level. Inspect code for weka.gui.graphvisualizer.HierarchicalBCEngine
+GraphVisualizer_JOptionPaneShowMessageDialog_Text_Fourth=\u062E\u0637\u0623
+GraphVisualizer_JBtZoom_SetToolTipText_Text=\u0632\u0648\u0645
+HierarchicalBCEngine_Crossings_Exception_Text_Third=\u0645\u0624\u0642\u0646\u0627\: 
+GraphVisualizer_Error_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 save.gif \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0641\u064A    weka.gui.graphvisualizer.Graph
+HierarchicalBCEngine_JP1_SetBorder_Text=\u0646\u0648\u0639 \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+BIFParser_Parse_BIFFormatException_Text_Sixth=\u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0642\u064A\u0645 \u0623\u0642\u0644 \u0645\u0646 \u0627\u0644\u0645\u0637\u0644\u0648\u0628
+BIFParser_Parse_BIFFormatException_Text_Fifth=\u0627\u0644\u062C\u062F\u0648\u0644 \u0627\u062D\u062A\u0645\u0627\u0644\u0627\u062A \u0644\u0640
+HierarchicalBCEngine_LayoutGraph_Progress_SetString_Text_Third=\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0646\u0642\u0627\u0637
+HierarchicalBCEngine_MyList_Add_Error_Text_First=\u0644\u0627 \u064A\u0646\u0628\u063A\u064A \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062E\u0637\u0623 \u0647\u0646\u0627. \u062A\u062D\u0642\u0642  \u0631\u0645\u0632 \u0642\u0627\u0626\u0645\u062A\u064A 
+DotParser_EdgeAttrib_Error_Text_Third=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u0644\u0648\u0646 \u0641\u064A \u0633\u0637\u0631
+DotParser_EdgeStmt_Error_Text_Second=. \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0639\u0627\u0645\u0644 \u0645\u0639 \u062D\u0648\u0627\u0641 \u063A\u064A\u0631 \u0645\u0648\u062C\u0647\u0629
+HierarchicalBCEngine_Crossings_Exception_Text_Second=\u0627\u0644\u0630\u064A  \u0647\u0648 \:
+GraphVisualizer_JBtZoomOut_SetToolTipText_Text=\u062A\u0635\u063A\u064A\u0631
+HierarchicalBCEngine_RemoveLayoutCompleteEventListener_Error_Text_Second=layoutCompleteListener to be remove not present
+HierarchicalBCEngine_Crossings_Exception_Text_First=levels[i][uidx]\: 
+DotParser_EdgeAttrib_Error_Text=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0625\u064A\u062C\u0627\u062F \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0641\u064A \u0633\u0637\u0631
+BIFParser_Parse_BIFFormatException_Text_Fourth=\u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0642\u064A\u0645 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0627\u0644\u0645\u0637\u0644\u0648\u0628
+GraphVisualizer_EF2_ExtensionFileFilter_Text=\u0645\u0644\u0641\u0627\u062A XML BIF
+HierarchicalBCEngine_JRbBottomup_JRadioButton_Text=\u0645\u0646 \u0623\u0633\u0641\u0644 \u0625\u0644\u0649 \u0623\u0639\u0644\u0649
+HierarchicalBCEngine_LayoutGraph_Progress_SetString_Text_First=\u062A\u0642\u0644\u064A\u0644 \u0627\u0644\u062A\u0642\u0627\u0637\u0639 \: \u0646\u062C\u062D
diff --git a/src/main/java/weka/gui/hierarchyvisualizer/messages/messages_ar.properties b/src/main/java/weka/gui/hierarchyvisualizer/messages/messages_ar.properties
new file mode 100644
index 0000000..cb15238
--- /dev/null
+++ b/src/main/java/weka/gui/hierarchyvisualizer/messages/messages_ar.properties
@@ -0,0 +1,4 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+HierarchicalClusterer_ParseNewick2_Exception_Text_First=\u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0642\u0648\u0633 \u0645\u0631\u0628\u0639 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0632\u0646\:
+HierarchicalClusterer_ParseNewick2_Exception_Text_Second=\u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0642\u0648\u0633 \u0645\u0631\u0628\u0639 \u063A\u064A\u0631 \u0645\u062A\u0648\u0627\u0632\u0646\:
diff --git a/src/main/java/weka/gui/messages/messages_ar.properties b/src/main/java/weka/gui/messages/messages_ar.properties
new file mode 100644
index 0000000..68b0037
--- /dev/null
+++ b/src/main/java/weka/gui/messages/messages_ar.properties
@@ -0,0 +1,623 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+Main_InitGUI_ExtensionFileFilter_Text_First=\u0645\u0644\u0641\u0627\u062A BIF (*. BIF)
+AttributeSelectionPanel_Pattern_SetToolTipText_Text=\u062A\u062D\u062F\u064A\u062F \u0643\u0627\u0641\u0629 \u0627\u0644\u0633\u0645\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u062A\u0637\u0627\u0628\u0642 \u0645\u0639  \u0627\u0644\u062A\u0639\u0628\u064A\u0631
+Main_Main_Text_Second=\u062E\u064A\u0627\u0631\u0627\u062A \u0639\u0627\u0645\u0629 \:
+GUIChooser_WekaOnSourceforge_URL_Text=http\://sourceforge.net/projects/weka/
+AttributeSummaryPanel_SetTable_ColNames_Text_Fifth=\u0642\u064A\u0645\u0629
+AttributeVisualizationPanel_SetInstances_ColorAttrib_Text_Second=\u0627\u0644\u0641\u0626\u0629\: 
+AttributeVisualizationPanel_SetInstances_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+LogPanel_Main_Lp_LogMessage_Text_First=\u0645\u0631\u062D\u0628\u0627 \u0628\u0643\u0645 \u0641\u064A \u0644\u0648\u062D\u0629 \u0627\u0644\u0633\u062C\u0644 \u0627\u0644\u0639\u0627\u0645\!
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Fourth=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A \u0644\u0631\u0624\u064A\u062A\u0647 \u0647\u0646\u0627 1
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_First=<html>
+AttributeSummaryPanel_SetTable_ColNames_Text_Second=\u0639\u0646\u0648\u0627\u0646
+SimpleCLIPanel_RunCommand_Error_Text_Second=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A\u0621 \u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \u062D\u0627\u0644\u064A\u0627.
+SimpleCLIPanel_CommandlineCompletion_GetClassMatches_Text_Second=' \=> \u0627\u0644\u062D\u0632\u0645\u0629\=
+GenericObjectEditor_RegisterEditors_Exception_Error_Text_Third=\: 
+SimpleCLIPanel_RunCommand_Text=\u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+AttributeVisualizationPanel_Main_JFrame_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0633\u0645\u0627\u062A
+Main_CreateWindowMenu_MenuItem_JMenuItem_Text_First=\u062E\u0641\u0636
+HierarchyPropertyParser_Main_Text_Third=\u0627\u0644\u0634\u062C\u0631\u0629\: \n  \n 
+ConverterFileChooser_ShowOpenDialog_RetVal_JOptionPaneShowConfirmDialog_Text_Second=' \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u0627\u0644\u0631\u062C\u0627\u0621 \u0627\u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649\!
+AttributeVisualizationPanel_GetToolTipText_Text_Seventh=\u060C
+AttributeVisualizationPanel_SetInstances_AttributeNOMINAL_Text=(Nom) 
+SetInstancesPanel_OpenFileBut_JButton_Text=\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0641
+SimpleCLIPanel_JScrollPane_Text_First=\u0648\u0633\u0637
+ListSelectorDialog_SelectPattern_Exception_JOptionPaneShowInputDialog_Text_First='
+Main_InitGUI_JMenuTools_JMenu_SetText_Text=\u0627\u0644\u0623\u062F\u0648\u0627\u062A
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Fourth='\:\n
+Main_ListOptions_Option_Text_Third=) 
+AttributeVisualizationPanel_Main_Text_Fifth=Usage\: java AttributeVisualizationPanel [arff file] [index of attribute]
+AttributeSelectionPanel_GetColumnName_Text_Third=\u0627\u0644\u0627\u0633\u0645
+GenericObjectEditor_Exception_Text=\u0641\u0634\u0644 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0644\u0645\u062D\u0631\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0639\u0627\u0645\u0629
+ConverterFileChooser_ShowSaveDialog_RetVal_JOptionPaneShowConfirmDialog_Text_First=\u0627\u0644\u0645\u0644\u0641 '
+PropertySelectorDialog_SelectBut_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+WekaTaskMonitor_Main_JFrame_BorderFactoryCreateTitledBorder_Text=\u0645\u0647\u0627\u0645 \u0648\u064A\u0643\u0627
+GUIChooser_BIF_Files_Text=\u0645\u0644\u0641\u0627\u062A BIF (*. BIF)
+SimpleCLIPanel_RunCommand_Error_Text_Fifth=break\n\n \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0644\u0627\u064A\u0642\u0627\u0641 \u0627\u0644\u0645\u0647\u0645\u0629 \u0627\u0644\u0645\u0634\u063A\u0644\u0629 \u062D\u0627\u0644\u064A\u0627 \u0628\u0634\u0643\u0644 \u0644\u0637\u064A\u0641\u060C \u0625\u0630\u0627 \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u062A\u062C\u0627\u0648\u0628 \u0628\u0648\u0642\u062A \u0645\u0639\u0642\u0648\u0644 \u0627\u0633\u062A\u062E\u062F\u0645 [...]
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Second=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A \u0644\u0631\u0624\u064A\u062A\u0647 \u0647\u0646\u0627 
+Main_Main_Thread_Run_Text_First=\u0625\u0646\u0634\u0627\u0621 Singleton
+HierarchyPropertyParser_Main_Text_TwentyThird=\u0627\u0644\u0623\u0628\u0646\u0627\u0621 
+Main_Main_Thread_Run_Error_Text_First=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_Second=\ ">
+AttributeVisualizationPanel_Main_Text_Second=\u0627\u0644\u0639\u0644\u0627\u0642\u0629\:
+CostMatrixEditor_OpenMatrix_JOptionPaneShowMessageDialog_Text_Third=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644
+HierarchyPropertyParser_Main_Text_Eighth=\u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u0625\u0628\u0646\:  
+SimpleDateFormatEditor_ApplyButton_JButton_Text=\u062A\u0637\u0628\u064A\u0642
+GUIChooser_SystemInfo_JFrame_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645
+GUIChooser_ROC_LoadingFile_Error_Text_End='\:\n
+HierarchyPropertyParser_Main_Text_TwentyFourth=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629 \:
+SimpleCL_SetTitle_Text=\u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629
+CostMatrixEditor_CustomEditor_ResizeButton_JButton_Text=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u062D\u062C\u0645
+HierarchyPropertyParser_Main_Text_Seventeenth=\u0627\u0644\u0642\u064A\u0645\u0629\: 
+Main_InitGUI_ExtensionFileFilter_Text_Third=\u0645\u0644\u0641\u0627\u062A ARFF (*
+ListSelectorDialog_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+DbConnectionDialog_UserNameLab_JLabel_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+HierarchyPropertyParser_Main_Text_Tenth=\u0627\u0644\u062C\u0630\u0631\u061F
+Main_InitGUI_JMenuItemVisualizationPlot_SetText_Text=\u062A\u062E\u0637\u064A\u0637 
+AttributeSummaryPanel_SetHeader_AttributeSTRING_Text=\u0633\u0644\u0633\u0644\u0629
+PropertySheetPanel_WasModified_JOptionPaneShowMessageDialog_Third=\:\n
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_Third=\ ">
+SimpleCLIPanel_CommandlineCompletion_GetFileMatches_Text_First=\u062D\u0633\u0627\u0633\u0629 \u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u062D\u0631\u0641
+CostMatrixEditor_SaveMatrix_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0627\u0644\u0645\u0644\u0641
+Main_InitGUI_JMenuItemHelpAbout_SetText_Text=\u062D\u0648\u0644
+AttributeVisualizationPanel_PaintComponent_StringWidth_Text_Second=\u064A\u062A\u0645 \u0627\u0644\u062D\u0633\u0627\u0628. \u064A\u0631\u062C\u0649 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 ...
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_Sixth=</font></i><html>
+PropertySheetPanel_SetTarget_CapabilitiesBut_JButton_Text=\u0642\u062F\u0631\u0627\u062A
+Main_InitGUI_JMenuItemBayesNet_SetText_Text=\u0645\u062D\u0631\u0631 \u0634\u0628\u0643\u0629  \u0628\u0627\u064A\u0632
+PropertySelectorDialog_CreateNodes_Error_Text_First=\u0646\u0635 \u0645\u062E\u062A\u0627\u0631 \u0627\u0644\u062E\u0627\u0635\u064A\u0629\: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0623\u0645\u0644
+SimpleDateFormatEditor_ApplyFormat_IllegalArgumentException_Text_Second=' \u063A\u064A\u0631 \u0635\u062D\u064A\u062D \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0646\u0641\u064A\u0630  \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0646\u0648\u0639\!
+SetInstancesPanel_SetInstancesFromFileQ_Exception_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Seventh=\u0623\u064A \u0634\u064A\u0621 3
+AttributeVisualizationPanel_GetToolTipText_Text_Fifteenth=\u060C
+AttributeSummaryPanel_SetTable_ColNames_Text_Fourth=\u0625\u062D\u0635\u0627\u0626\u064A\u0629
+GenericArrayEditor_DeleteBut_JButton_Text=\u062D\u0630\u0641
+SimpleCLIPanel_RunCommand_Error_Text_Fourth=some.txt
+SimpleCLIPanel_JScrollPane_Text_Third=\u0645\u0631\u062D\u0628\u0627 \u0628\u0643\u0645 \u0641\u064A \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637 \u0645\u0646 \u0648\u064A\u0643\u0627\n\n\u0627\u062F\u062E\u0644 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0641\u064A \u0627\u0644\u062D\u0642\u0644 \u0627\u0644\u0646\u0635\u064A \u0641\u064A \u0627\u0644\u062C\u0632\u0621 \u0627\u0644\u0633\u0641\u0644\u064A \u0645\u0646 \u0627\u0644\u [...]
+ListSelectorDialog_SelectPattern_Exception_JOptionPaneShowInputDialog_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u0646\u0645\u0637 ...
+HierarchyPropertyParser_Main_Text_TwentySecond=\u0627\u0644\u0645\u0633\u062A\u0648\u0649\:
+GUIChooser_Applications_Text=\u0625\u0636\u0627\u0641\u064A
+GenericObjectEditor_JTreePopupMenu_CloseButton_JButton_Text=\u0625\u063A\u0644\u0627\u0642
+AttributeVisualizationPanel_GetToolTipText_Text_Nineth=<html><center><font faceDialog size-1>
+AttributeSummaryPanel_SetTable_Data_0_Text=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649
+AttributeSummaryPanel_SetHeader_AttributeRELATIONAL_Text=\u0627\u0644\u0639\u0644\u0627\u0642\u0627\u062A
+Main_InitGUI_ExtensionFileFilter_Text_Second=XML \u0645\u0644\u0641\u0627\u062A (*. XML)
+SimpleCLIPanel_ClassRunner_Run_Text_Second='.
+Main_InitGUI_JMenuItemHelpWekaWiki_SetText_Text=\u062E\u0637\u0648\u0627\u062A \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u060C \u0645\u0642\u062A\u0637\u0641\u0627\u062A \u0627\u0644\u0634\u0641\u0631\u0629\u060C \u0627\u0644\u062E
+AttributeSelectionPanel_Pattern_JButton_Text=\u0646\u0645\u0637
+GUIChooser_Program_Text=\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C
+AttributeSelectionPanel_RemoveAll_SetToolTipText_Text=\u0625\u0644\u063A\u0627\u0621 \u0627\u062E\u062A\u064A\u0627\u0631 \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0641\u0627\u062A
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Fifth=\u0623\u064A \u0634\u064A\u0621 2
+AttributeVisualizationPanel_GetToolTipText_Text_Fifth=<html><center><font faceDialog size-1>
+DbConnectionDialog_DebugLab_JLabel_Text=\u062A\u0635\u062D\u064A\u062D
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Seventh=\u0625\u0636\u0627\u0641\u064A\n   
+GenericArrayEditor_UpBut_SetToolTipText_Text=\u062A\u062D\u0631\u064A\u0643 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F ( \u0627\u0644\u0639\u0646\u0627\u0635\u0631 ) \u062D\u0631\u0643\u0629 \u0648\u0627\u062D\u062F\u0629 \u0625\u0644\u0649 \u0627\u0644\u0623\u0639\u0644\u0649
+SetInstancesPanel_OpenURLBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0645\u062B\u064A\u0644\u0627\u062A \u0645\u0646 \u0627\u0644\u0631\u0627\u0628\u0637
+LogPanel_Main_JFrame_Text=\u0644\u0648\u062D\u0629 \u0627\u0644\u0633\u062C\u0644
+SetInstancesPanel_SetInstancesFromURL_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0642\u0627\u0631\u0621 \u0645\u0635\u062F\u0631 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0631\u0627\u0628\u0637\!
+GenericObjectEditor_RegisterEditors_Error_Text=---\u062A\u0633\u062C\u064A\u0644 \u0645\u062D\u0631\u0631 \u0648\u064A\u0643\u0627---
+MemoryUsagePanel_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 
+LookAndFeel_Main_Text_First=\u0627\u0644\u0623\u0634\u0643\u0627\u0644 \u0648 \u0627\u0644\u0645\u0638\u0627\u0647\u0631 \u0627\u0644\u0645\u062B\u0628\u062A\u0629 \:
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_Fourth=<html><font color"
+AttributeVisualizationPanel_Main_Text_Fourth=\u0627\u0644\u0633\u0645\u0627\u062A \u0647\u064A\: 
+PropertySelectorDialog_CreateNodes_Error_Text_Second=\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u062C\u0627\u0648\u0632
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Eighth=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0645\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A\: 
+PropertyPanel_CreateDefaultPanel_Item_JMenuItem_Text_Second=\u0646\u0633\u062E \u0627\u0644\u062A\u0643\u0648\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629
+GenericObjectEditor_RegisterEditors_Exception_Error_Text_Second=/ 
+AttributeSelectionPanel_RemoveAll_JButton_Text=\u0644\u0627 \u0634\u064A\u0621
+SimpleCLIPanel_CommandlineCompletion_GetFileMatches_Text_Third=\u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u0637\u0627\u0628\u0642\u0629\:
+CostMatrixEditor_SaveMatrix_JOptionPaneShowMessageDialog_Text_Third=\u0641\u0634\u0644 \u0641\u064A \u0627\u0644\u062D\u0641\u0638
+AttributeVisualizationPanel_GetToolTipText_Text_Eighth=)</font></html>
+AttributeSummaryPanel_SetHeader_UniqueLab_SetText_Text=...
+LogWindow_LabelCurrentSize_JLabel_Text=\u062D\u0627\u0644\u064A\u0627\: 0
+PropertySelectorDialog_CreateNodes_Error_Text_Third=; \u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u0641\u064A \u0627\u0644\u0647\u062F\u0641\: 
+SaveBuffer_Main_Jb_JButton_Text=\u062D\u0641\u0638
+PropertySheetPanel_OpenHelpFrame_Jdtmp_JDialog_Text_Second=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
+LookAndFeel_Exception_JOptionPaneShowMessageDialog_Text_First=\u0627\u0644\u0634\u0643\u0644 \u0648 \u0627\u0644\u0645\u0638\u0647\u0631\: \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u062A\u0645\u0643\u0646 \u0645\u0646 \u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0627\u0644\u0627\u0639\u062F\u0627\u062F\u0627\u062A \u0644\u0644\u0634\u0643\u0644 \u0648 \u0627\u0644\u0645\u0638\u0647\u0631.\n\u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0641\u [...]
+LogWindow_ButtonClose_JButton_Text=\u0625\u063A\u0644\u0627\u0642
+SimpleDateFormatEditor_ApplyFormat_IllegalArgumentException_Text_First=\u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u062A\u0627\u0631\u064A\u062E '
+SimpleDateFormatEditor_JLabel_Text=ISO 8601 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u062A\u0627\u0631\u064A\u062E 
+HierarchyPropertyParser_Main_Text_Twelveth=\u0627\u0644\u0645\u0633\u062A\u0648\u0649\:
+GenericPropertiesCreator_Main_Text_Second=[<input.props>] [<output.props>]
+InstancesSummaryPanel_Main_P_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0639\u0644\u0627\u0642\u0629
+ConverterFileChooser_ShowSaveDialog_RetVal_JOptionPaneShowConfirmDialog_Text_Second=' \u0645\u0648\u062C\u0648\u062F \u0641\u0639\u0644\u064A\u0627 \u060C \u0647\u0644 \u062A\u0631\u064A\u062F \u0627\u0633\u062A\u0628\u062F\u0627\u0644\u0647\u061F
+GenericObjectEditor_OpenObject_Exception_Text=\u0627\u0644\u0643\u0627\u0626\u0646 \u0644\u064A\u0633 \u0645\u0646 \u0646\u0648\u0639\:
+GUIChooser_ROC_Text=ROC
+GUIChooser_WekaExperimentEnvironment_JFrame_Text=\u0628\u064A\u0626\u0629 \u0627\u0644\u062A\u062C\u0631\u0628\u0629 \u0641\u064A \u0648\u064A\u0643\u0627 
+InstancesSummaryPanel_Lab_JLabel_Text_Second=\u0627\u0644\u062D\u0627\u0644\u0627\u062A\:    
+SetInstancesPanel_SetInstancesFromFileQ_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+Main_ListOptions_Option_Text_Second=( \u0627\u0644\u0625\u0641\u062A\u0631\u0627\u0636\u064A\: 
+AttributeSelectionPanel_GetColumnName_Text_Second=
+SetInstancesPanel_OpenURLBut_JButton_Text=\u0641\u062A\u062D \u0627\u0644\u0631\u0627\u0628\u0637 ...
+LogPanel_AddPopup_StatusMessage_Text_Fifth=\u0645\u0648\u0627\u0641\u0642
+GUIChooser_KnowledgeFlow_Text=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+GenericObjectEditor_OpenBut_JButton_Text=\u0641\u062A\u062D...    
+GenericPropertiesCreator_UseDynamic_Text=[\u0645\u0646\u0634\u0626 \u0627\u0644\u062E\u0648\u0627\u0635 \u0627\u0644\u0639\u0627\u0645\u0629]  \u0645\u062D\u0645\u0644 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0644\u064A\u0633 \u0627\u0644\u0645\u062D\u0645\u0644 \u0627\u0644\u062E\u0627\u0635 \u0628\u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0627\u062F\u062E\u0627\u0644\u0627\u062A \u0627\u0644\u062B\u06 [...]
+PropertySheetPanel_SetTarget_HelpText_Text_Fifth=\u062E\u064A\u0627\u0631\u0627\u062A \n
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_First=<html><font color"
+PropertySheetPanel_SetTarget_HelpBut_SetToolTipText_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0623\u062E\u0631\u0649 \u0639\u0646
+SetInstancesPanel_SetInstancesFromFile_Exception_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+CheckBoxList_CopyInto_IndexOutOfBoundsException_Text=\u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u064A\u0633\u062A \u0643\u0628\u064A\u0631\u0629 \u0628\u0645\u0627 \u0641\u064A\u0647 \u0627\u0644\u0643\u0641\u0627\u064A\u0629\!
+AttributeSummaryPanel_SetTable_Data_1_Text=\u0623\u0642\u0635\u0649
+MemoryUsagePanel_Error_Nineth=' - \u062A\u0645 \u0627\u0644\u0646\u062C\u0627\u0647\u0644\!
+SysErrLog_LogMessage_Text_Second=\: 
+InstancesSummaryPanel_NO_SOURCE_Text=\u0644\u0627 \u0634\u064A\u0621
+AttributeVisualizationPanel_PaintComponent_G_DrawString_Text_Second=\u064A\u062A\u0645 \u0627\u0644\u062D\u0633\u0627\u0628. \u064A\u0631\u062C\u0649 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 ...
+PropertySheetPanel_SetTarget_Empty_JLabel_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u062E\u0627\u0635\u064A\u0629 \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u062A\u0639\u062F\u064A\u0644 
+GenericObjectEditor_ClassSelected_Exception_JOptionPaneShowMessageDialog_Text_Second=\u0645\u0646 \u0645\u0633\u0627\u0631 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062D\u0627\u0644\u064A
+LogWindow_CheckBoxWordwrap_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u0641 \u0627\u0644\u0643\u0644\u0645\u0627\u062A
+HierarchyPropertyParser_Main_Text_Second=\u0627\u0644\u0639\u0645\u0642\: 
+LogPanel_TaskLogger_LogButton_JButton_Text=\u0633\u062C\u0644
+GUIChooser_Plot_PlotName_Text=\u062A\u062E\u0637\u064A\u0637 - 
+LookAndFeel_Main_Text_Third='.
+AttributeVisualizationPanel_SetInstances_AttributeNUMERIC_Text=(Num)
+Main_InitGUI_Pd1_SetPlotName_Text_First=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+SimpleCLIPanel_ClassRunner_Run_Error_Text_First=[... \u062A\u0645 \u0627\u0644\u0642\u0637\u0639]
+JTableHelper_CalcHeaderWidth_Text=\u0639\u0645\u0648\u062F \u063A\u064A\u0631 \u0635\u0627\u0644\u062D
+Main_InitGUI_JMenuItemHelpHomepage_SetText_Text=\u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 \u0641\u064A \u0648\u064A\u0643\u0627
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Fifth=\u062E\u0637\u0623 \u0641\u064A \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629\: \n
+AttributeVisualizationPanel_GetToolTipText_Text_Eleventh=\u060C
+AttributeVisualizationPanel_GetToolTipText_Text_Thirteenth=<html><center><font faceDialog size-1>
+PropertySelectorDialog_CreateNodes_Error_Text_Fourth=\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u062C\u0627\u0648\u0632
+LookAndFeel_Exception_JOptionPaneShowMessageDialog_Text_Third=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+Main_InitGUI_Pd1_SetPlotName_Text_Second=\u062A\u062E\u0637\u064A\u0637 
+GUIChooser_BoundaryVisualizer_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u062D\u062F\u0648\u062F
+GUIChooser_ROC_AreaUnderROC_Text_End=)
+AttributeSummaryPanel_SetHeader_DistinctLab_SetText_Text=...
+DbConnectionDialog_PasswordLab_JLabel_Text=\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631
+SysErrLog_StatusMessage_Text=\u0627\u0644\u062D\u0627\u0644\u0629\:
+AttributeVisualizationPanel_SetInstances_AttributeDEFAULT_Text=(???) 
+Main_InitGUI_TitlePan_Add_JLabel_Text_Sixth=(c) 
+SaveBuffer_Save_Dialog_JopCreateDialog_Text=\u0627\u0633\u062A\u0639\u0644\u0627\u0645 \u0627\u0644\u0645\u0644\u0641
+GUIChooser_Plot_LoadingFile_Error_Text_End='\:\n
+SetInstancesPanel_SetInstancesFromFile_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0645\u062D\u0648\u0644 \u0645\u0644\u0641\u0627\u062A \u0645\u0644\u0627\u0626\u0645 \u0644\u0644\u0645\u0644\u0641\!\n
+SortedTableModel_ToString_Text_Second=\u060C \u0645\u0624\u0634\u0631
+GenericObjectEditor_UpdateChildPropertySheet_ClassName_Text=\u0644\u0627 \u0634\u064A\u0621
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Fifth=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649\:
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Sixth=\n\n
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_Third=</font></i><html>
+SimpleCLIPanel_RunCommand_Error_Text_Seventh=cls\n\n\u0645\u0633\u062D \u0634\u0627\u0634\u0629 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A.
+HierarchyPropertyParser_Main_Text_Thirteenth=\u0627\u0644\u0633\u064A\u0627\u0642\: 
+GUIChooser_TreeVisualizer_LoadingFile_Error_Text_Front=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+Main_InitGUI_JMenuItemHelpSourceforge_SetText_Text=\u0648\u064A\u0643\u0627 \u0639\u0644\u0649 Sourceforge
+LookAndFeel_SetLookAndFeel_ClassName_Text=\u0645\u0648\u0636\u0648\u0639
+AttributeSummaryPanel_SetTable_Data_2_Text=\u0645\u062A\u0648\u0633\u0637
+GUIChooser_Help_Text=\u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+DbConnectionDialog_Main_URL_Text=\u0627\u0644\u0631\u0627\u0628\u0637
+Main_InitGUI_JMenuItemToolsSqlViewer_SetText_Text=SQL-\u0639\u0627\u0631\u0636
+AttributeVisualizationPanel_GetToolTipText_Text_Sixteenth=)</font></html>
+MemoryUsagePanel_ButtonGC_SetToolTipText_Text=\u064A\u0639\u0645\u0644 \u0639\u0644\u0649 \u062C\u0645\u0639 \u0627\u0644\u0642\u0645\u0627\u0645\u0629 .
+Main_InitGUI_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+DatabaseConnectionDialog_Text=\u0645\u0639\u0637\u064A\u0627\u062A \u0627\u062A\u0635\u0627\u0644 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+AttributeSelectionPanel_Pattern_JOptionPaneShowInputDialog_Text=\u0623\u062F\u062E\u0644 \u0627\u0644\u062A\u0639\u0628\u064A\u0631 \u0627\u0644\u0639\u0627\u062F\u064A\u0629 Perl
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_Sixth=\u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645
+JListHelper_MoveItems_Error_Text_Second=' \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641\!
+MemoryUsagePanel_Error_Sixth=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0645\u0648\u0642\u0639 - 
+SimpleCLIPanel_ClassRunner_Run_Error_Text_Third=[Run exception] 
+GenericPropertiesCreator_LoadInputProperties_Text_First=\u062A\u062D\u0645\u064A\u0644 '
+SetInstancesPanel_CloseBut_SetToolTipText_Text=\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062D\u0648\u0627\u0631
+AttributeSelectionPanel_IncludeAll_SetToolTipText_Text=\u062A\u062D\u062F\u064A\u062F \u0643\u0627\u0641\u0629 \u0627\u0644\u0633\u0645\u0627\u062A
+GenericObjectEditor_CreateTree_GOETreeNode_Text=\u062C\u0630\u0631
+SimpleCLIPanel_Exception_Text_First=\u0641\u0634\u0644 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0644\u0634\u0631\u064A\u0637 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637
+GUIChooser_SqlViewer_JFrame_Text=SQL-\u0639\u0627\u0631\u0636
+SetInstancesPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+GUIChooser_TreeVisualizer_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+PropertySelectorDialog_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+DbConnectionDialog_ButtonP_JButton_Cancel_Text=\u0625\u0644\u063A\u0627\u0621
+HierarchyPropertyParser_Main_Text_Fourth=\u0627\u0630\u0647\u0628 \u0625\u0644\u0649\:
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Second=\n\n
+SimpleCLIPanel_JScrollPane_Text_Second=\u062C\u0646\u0648\u0628
+SimpleDateFormatEditor_DefaultButton_JButton_Text=\u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A
+PropertySheetPanel_WasModified_Error_Text_First=\u062E\u0644\u0627\u0644 \u0627\u0644\u062A\u0639\u062F\u064A\u0644
+Main_CreateWindowMenu_MenuItem_JMenuItem_Text_Second=\u0627\u0633\u062A\u0639\u0627\u062F\u0629
+CostMatrixEditor_CustomEditor_OpenButton_JButton_Text=\u0641\u062A\u062D...    
+SelectedTagEditor_Main_Tags_Text_First=\u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u0623\u0648\u0644
+FileEditor_GetCustomEditor_FileChooser_SetApproveButtonText_Text=\u0627\u062E\u062A\u0627\u0631
+GUIChooser_ROC_File_Text=ROC -
+SaveBuffer_Save_Options_0_Text=\u0625\u0644\u062D\u0627\u0642
+GenericObjectEditor_GetClassesFromProperties_Exception_Error_Text=\u062E\u0627\u0635\u064A\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\u0629\: 
+SimpleCLIPanel_Exception_JOptionPaneShowMessageDialog_Text_First=\ \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u062A\u0645\u0643\u0646 \u0645\u0646 \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u0627\u0639\u062F\u0627\u062F\u0627\u062A \u0644\u0634\u0631\u064A\u0637 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637 .\n\u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0641\u064A \u0645\u0648\u0632\u0639 \u064 [...]
+GenericObjectEditor_CopyObject_Error_Text=\u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645 \: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0646\u0633\u062E\u0629 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637\u064A\u0629 \u0644\u0644\u0643\u0627\u0626\u0646 
+GenericObjectEditor_SetDefaultValue_Exception_Error_Text=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \:
+GUIChooser_WekaHOWTO_Text=\u062E\u0637\u0648\u0627\u062A \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u060C \u0645\u0642\u062A\u0637\u0641\u0627\u062A \u0627\u0644\u0634\u0641\u0631\u0629\u060C \u0627\u0644\u062E
+PropertySheetPanel_OpenHelpFrame_Jdtmp_JDialog_Text_First=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
+LogWindow_CaretUpdate_Text=\u062D\u0627\u0644\u064A\u0627\: 
+GenericObjectEditor_SetValue_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0646\u0648\u0639 \u0627\u0644\u0641\u0626\u0629  \u0645\u0639\u064A\u0646 \u0645\u0646 \u0623\u062C\u0644 \u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645 \!
+AttributeListPanel_Main_Error_Text=\u0632\u0648\u062F \u0627\u0633\u0645 \u0645\u0644\u0641 arff
+Main_Tag_GUI_Text_First=\u062A\u062E\u0637\u064A\u0637 MDI 
+GenericPropertiesCreator_GenerateOutputProperties_Text_First=\u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0645\u0639 '
+PropertyPanel_CreateDefaultPanel_Exception_Text_First=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0644\u064A\u0644 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \n
+GUIChooser_CreateTitle_Text_Front=\u0648\u064A\u0643\u0627
+GenericArrayEditor_EditBut_SetToolTipText_Text=\u062A\u062D\u0631\u064A\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F
+PropertySheetPanel_SetTarget_Error_Text_Fourth=; \u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u0641\u064A \u0627\u0644\u0647\u062F\u0641\: 
+SetInstancesPanel_SetInstancesFromURL_Exception_JOptionPaneShowMessageDialog_Text_First=\u063A\u064A\u0631 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0631\u0627\u0628\u0637
+AttributeSelectionPanel_Exception_JOptionPaneShowMessageDialog_Text_Second=' \u062A\u0639\u0628\u064A\u0631 \u0639\u0627\u062F\u064A \u0645\u0646 \u0646\u0648\u0639 Perl \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\!\n\u0627\u0644\u062E\u0637\u0623 \:
+SaveBuffer_Main_JFrame_Text=\u062D\u0641\u0638 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u062E\u0632\u0646 
+DbConnectionDialog_WindowClosing_Text=\u0623\u0644\u063A\u064A\!
+GUIChooser_MasterPlot_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+AttributeSummaryPanel_SetTable_Data_3_Text=\u0627\u0644\u0627\u0646\u062D\u0631\u0627\u0641 \u0627\u0644\u0645\u0639\u064A\u0627\u0631\u064A
+PropertySheetPanel_SetTarget_Error_Text_Fifth=\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u062C\u0627\u0648\u0632
+SimpleCLIPanel_CommandlineCompletion_GetCommonPrefix_Text_First=\n  --> \u0627\u0644\u0628\u0627\u062F\u0626\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629\: '
+ListSelectorDialog_Text=\u062A\u062D\u062F\u064A\u062F \u0639\u0646\u0627\u0635\u0631
+GenericPropertiesCreator_StoreOutputProperties_Text_Second='...
+GUIChooser_Title_Text=\u0645\u0646\u062A\u0642\u064A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0641\u064A \u0648\u064A\u0643\u0627 
+Main_InitGUI_TitlePan_Add_JLabel_Text_First=\u0628\u064A\u0626\u0629 \u0648\u064A\u0643\u0627\u062A\u0648 
+SplashWindow_InvokeMethod_Exception_InternalError_Text=\u0641\u0634\u0644 \u0641\u064A \u0625\u062D\u0638\u0627\u0631 \u0627\u0644\u0645\u0647\u0645\u0629\:
+Main_InitGUI_JMenuWindows_JMenu_Text=\u0646\u0648\u0627\u0641\u0630
+FileEditor_PaintValue_Val_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u0644\u0641
+LogWindow_Text=\u0648\u064A\u0643\u0627 - \u0627\u0644\u0633\u062C\u0644
+SaveBuffer_SaveOverwriteAppend_Log_StatusMessage_Text_Second=\u062D\u0641\u0638 \u0641\u064A \u0645\u0644\u0641 ...
+PropertySheetPanel_WasModified_Error_Text_Second=\: 
+AttributeSelectionPanel_Invert_JButton_Text=\u0642\u0644\u0628
+AttributeSummaryPanel_Lab_JLabel_Text_Fifth=\u0641\u0631\u064A\u062F\u0629 \u0645\u0646 \u0646\u0648\u0639\u0647\u0627\:
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_First=\u0627\u0644\u0641\u0626\u0629 -- 
+MemoryUsagePanel_Error_Eighth=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0644\u0648\u0646 '
+InstancesSummaryPanel_Main_JFrame_Text=\u0644\u0648\u062D\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+AttributeSummaryPanel_Main_P_SetBorder_BorderFactoryCreateTitledBorder=\u0627\u0644\u0633\u0645\u0629
+SelectedTagEditor_Main_Tags_Text_Second=\u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u062B\u0627\u0646\u064A
+SelectedTagEditor_Main_Tags_Text_Third=\u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u062B\u0627\u0644\u062B
+Main_InitGUI_JMenuItemApplicationsExplorer_SetText_Text=\u0627\u0644\u0645\u062A\u0635\u0641\u062D
+ViewerDialog_OkButton_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+PropertySheetPanel_SetTarget_Error_Text_Second=\u0644\u064A\u0633 \u0644\u062F\u064A\u0647\u0627 \u0645\u062D\u0631\u0631 \u0644\u0644\u0639\u0631\u0636. \u062A\u062E\u0637\u064A 
+SimpleCLIPanel_Exception_JOptionPaneShowMessageDialog_Text_Third=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+SaveBuffer_Save_Options_1_Text=\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0641\u0648\u0642
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Fourth=\n\n
+LogPanel_AddPopup_StatusMessage_Text_Second=/  
+ConverterFileChooser_ShowDialog_IllegalStateException_Text=\u0627\u0633\u062A\u062E\u062F\u0645 \u0625\u0645\u0627   showOpenDialog \u0623\u0648 showSaveDialog\!
+HierarchyPropertyParser_Main_Text_Twenty=\u0627\u0644\u062C\u0630\u0631\u061F
+SetInstancesPanel_SetInstancesFromFileQ_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+AttributeVisualizationPanel_GetToolTipText_Text_Fourth=)</font></html>
+CostMatrixEditor_CustomEditor_FileChooser_SetFileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0644\u062A\u0643\u0644\u0641\u0629
+GUIChooser_Weka_Native_Bird_Text=\u0648\u064A\u0643\u0627\u060C \u0637\u0627\u0626\u0631 \u0645\u0648\u0627\u0637\u0646 \u0645\u0646 \u0646\u064A\u0648\u0632\u064A\u0644\u0646\u062F\u0627
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Seventh='\:\n
+MemoryUsagePanel_Error_First=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0646\u0633\u0628\u0629 '
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_First=\ \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u062A\u0645\u0643\u0646 \u0645\u0646 \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u0627\u0639\u062F\u0627\u062F\u0627\u062A \u0644\u0645\u062D\u0631\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0639\u0627\u0645\u0629 .\n\u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0641\u064A \u0645\u0648\u0632\u0639  [...]
+Main_Main_Thread_Run_Error_Text_Second=\n \u0627\u0644\u062E\u0631\u0648\u062C
+SimpleCLIPanel_RunCommand_Error_Text_Sixth=\u0625\u0646\u0647\u0627\u0621\n\n\u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u0648\u0637\u064A\u0641\u0629 \u0627\u0644\u0641\u0639\u0627\u0644\u0629 \u0625\u0630\u0627 \u0648\u062C\u062F\u062A\u060C \u0644\u0627 \u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0625\u0644\u0627 \u0625\u0630\u0627 \u0644\u0645 \u0628\u0633\u062A\u062C\u0628 \u0627\u0644\u062A\u0648\u0642\u0641
+CostMatrixEditor_OpenMatrix_JOptionPaneShowMessageDialog_Text_Second='\:\n
+SetInstancesPanel_SetInstancesFromFileQ_UrlName_JOptionPaneShowMessageDialog_Text_First=\u0623\u062F\u062E\u0644 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0635\u062F\u0631
+SimpleCLIPanel_Exception_JOptionPaneShowMessageDialog_Text_Second=" \u0648 \u064A\u062C\u0628 \u0648\u0636\u0639\u0647\u0627 \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0631\u0626\u064A\u0633\u064A (\u0627\u0644\u0630\u064A \u0647\u0648 "
+GenericObjectEditor_CapabilitiesFilterDialog_CancelButton_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+Main_InitGUI_JMenuExtensions_JMenu_Text=\u0645\u0644\u062D\u0642\u0627\u062A
+AttributeSummaryPanel_Lab_JLabel_Text_Fourth=\u0645\u062E\u062A\u0644\u0641\:
+Main_InitGUI_JMenuHelp_SetText_Text=\u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+PropertySheetPanel_SetTarget_Jp_JPanel_BorderFactoryCreateTitledBorder_Text=\u062D\u0648\u0644
+GenericObjectEditor_SetDefaultValue_Error_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0646\u0648\u0639 \u0627\u0644\u0641\u0626\u0629  \u0645\u0639\u064A\u0646 \u0645\u0646 \u0623\u062C\u0644 \u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645 \!
+HierarchyPropertyParser_Main_Text_Fifth=\u0627\u0644\u0646\u0647\u0627\u064A\u0629\u061F
+SimpleCLIPanel_Main_JFrame_SetText_Text=\u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629
+Main_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+GenericArrayEditor_DownBut_SetToolTipText_Text=\u062A\u062D\u0631\u064A\u0643 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F ( \u0627\u0644\u0639\u0646\u0627\u0635\u0631 ) \u062D\u0631\u0643\u0629 \u0648\u0627\u062D\u062F\u0629 \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644
+ListSelectorDialog_Main_DefaultListModel_AddElement_Text_First=\u0648\u0627\u062D\u062F
+Main_InitGUI_BrowserHelperOpenURL_Text_Third=http\://sourceforge.net/projects/weka/
+SetInstancesPanel_SetInstancesFromFile_Exception_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0645\u0646 \u0627\u0644\u0645\u0644\u0641 \: \n
+AttributeSelectionPanel_Exception_JOptionPaneShowMessageDialog_Text_First='
+LogPanel_Main_Lp_StatusMessage_Text=\u0645\u0631\u062D\u0628\u0627 
+LogPanel_P1_SetBorder_BorderFactoryCreateTitledBorder_Text=\u0633\u062C\u0644
+Main_InitGUI_TitlePan_Add_JLabel_Text_Fourth=\u0627\u0644\u0625\u0635\u062F\u0627\u0631 
+GUIChooser_GraphVisualizer_LoadingFile_Error_Text_End='\:\n
+SimpleCLIPanel_CommandlineCompletion_GetClassMatches_Text_First=\u0628\u062D\u062B \u0639\u0646 \:'
+GUIChooser_LoadingInstancesFrom_Error_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+HierarchyPropertyParser_Main_Text_TwentyFifth=(level\:  
+Main_InitGUI_TitlePan_Add_JLabel_Text_Third=
+AttributeVisualizationPanel_GetToolTipText_Text_Second=<BR> [
+GUIChooser_Information_Text_Front=<HTML> <font size-2> \u0628\u064A\u0626\u0629 \u0648\u064A\u0643\u0627\u062A\u0648 \u0644\u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 <BR> \u0646\u0633\u062E\u0629
+ResultHistoryPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0645\u0635\u0646\u0641
+ListSelectorDialog_Main_DefaultListModel_Error_Text_Second=\u0623\u0644\u063A\u064A
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Third=\u0627\u0644\u0633\u0645\u0627\u062A --  
+AttributeVisualizationPanel_SetInstances_AttributeRELATIONAL_Text=(Rel) 
+HierarchyPropertyParser_Main_Text_Eighteenth=\u0627\u0644\u0645\u0633\u062A\u0648\u0649\:
+AttributeSummaryPanel_Lab_JLabel_Text_Second=\u0627\u0644\u0646\u0648\u0639\:
+Main_InitGUI_Vmc_SetROCString_Text=(\u0645\u0646\u0637\u0642\u0629 \u062A\u062D\u062A \u0645\u0646\u062D\u0646\u0649 ROC \= 
+GUIChooser_Tools_Text=\u0627\u0644\u0623\u062F\u0648\u0627\u062A
+AttributeSummaryPanel_SetTable_ColNames_Text_First=\u0644\u0627.
+PropertySheetPanel_WasModified_JOptionPaneShowMessageDialog_Fifth=\u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u063A\u064A\u0631 \u0645\u062A\u0648\u0642\u0639 \u062E\u0644\u0627\u0644 \u0627\u0644\u062A\u0639\u062F\u064A\u0644
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_Fifth=\ ">
+SetInstancesPanel_OpenFileBut_SetToolTipText_Text=\u0641\u062A\u062D \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 \u0645\u0644\u0641
+BrowserHelper_Exception_Text=\u062A\u0639\u0630\u0631 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0645\u0633\u062A\u0639\u0631\u0636 \u0648\u064A\u0628
+AttributeSelectionPanel_Main_Exception_Text=\u0632\u0648\u062F \u0627\u0633\u0645 \u0645\u0644\u0641 arff
+AttributeVisualizationPanel_GetToolTipText_Text_Texth=<BR> [
+MemoryUsagePanel_Error_Third=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u0646 \u0644\u0644\u0646\u0633\u0628\u0629 '
+SelectedTagEditor_Main_Tags_Text_Fourth=\u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u0631\u0627\u0628\u0639
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_Third=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+SaveBuffer_Save_Options_2_Text=\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0633\u0645 \u062C\u062F\u064A\u062F
+GUIChooser_GraphVisualizer_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+LogPanel_TaskLogger_StatusLab_JLabel_Text=\u0645\u0648\u0627\u0641\u0642
+ListSelectorDialog_PatternBut_JButton_Text=\u0646\u0645\u0637
+Main_InitGUI_JMenuItemApplicationsSimpleCLI_SetText_Text=\u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629
+Main_InitGUI_TitlePan_Add_JLabel_Text_Second=\u0644\u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+AttributeVisualizationPanel_GetToolTipText_Text_Sixth=<BR> [
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_nineth='\:\n
+GUIChooser_CreateTitle_Text_End=- 
+SetInstancesPanel_SetInstancesFromURL_Exception_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+LogPanel_AddPopup_StatusMessage_Text_Fourth=\u062A\u0634\u063A\u064A\u0644 \u062C\u0645\u0639 \u0627\u0644\u0642\u0645\u0627\u0645\u0629
+GenericObjectEditor_ClassSelected_Exception_JOptionPaneShowMessageDialog_Text_First=\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0645\u062B\u0627\u0644 \n
+Main_InitGUI_JMenuItemApplicationsExperimenter_SetText_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629
+GenericObjectEditor_OpenObject_Exception_JOptionPaneShowMessageDialog_Text=\u0641\u062A\u062D \u0645\u0644\u0641 \u0627\u0644\u0643\u0627\u0626\u0646
+GenericObjectEditor_CancelBut_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_Second=" \u0648 \u064A\u062C\u0628 \u0648\u0636\u0639\u0647\u0627 \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0631\u0626\u064A\u0633\u064A (\u0627\u0644\u0630\u064A \u0647\u0648 "
+ListSelectorDialog_Main_DefaultListModel_AddElement_Text_Third=\u062B\u0644\u0627\u062B\u0629
+GUIChooser_ArffViewer_Text=Arff \u0639\u0627\u0631\u0636
+GUIChooser_UnableToStartSimpleCLI_Error_Text=\u062A\u0639\u0630\u0631 \u0628\u062F\u0621 \u062A\u0634\u063A\u064A\u0644 \u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629 \!
+AttributeVisualizationPanel_Main_Text_First=\u0645\u062D\u0645\u0644\: 
+WekaTaskMonitor_MonitorLabel_JLabel_Text=x 
+SimpleCLIPanel_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629
+GUIChooser_Main_LoggingStarted_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+Main_InitGUI_JMenuItemApplicationsKnowledgeFlow_SetText_Text=\u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629
+GUIChooser_WekaKnowledgeFlowEnvironment_JFrame_Text=\u0628\u064A\u0626\u0629 \u062A\u062F\u0641\u0642 \u0627\u0644\u0645\u0639\u0631\u0641\u0629 \u0641\u064A \u0648\u064A\u0643\u0627
+CostMatrixEditor_SetAsText_IllegalArgumentException_Text=\u0645\u062D\u0631\u0631 \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u0643\u0644\u0641\u0629\: \u062E\u0635\u0627\u0626\u0635 \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u0643\u0644\u0641\u0629 \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0639\u0628\u064A\u0631 \u0639\u0646\u0647\u0627 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0646\u0635
+AttributeSelectionPanel_Exception_JOptionPaneShowMessageDialog_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u0646\u0645\u0637 ...
+AttributeSelectionPanel_Invert_SetToolTipText_Text=\u064A\u0642\u0644\u0628 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629
+SetInstancesPanel_SetInstancesFromFileQ_UrlName_JOptionPaneShowMessageDialog_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A 
+ViewerDialog_UndoButton_JButton_Text=\u062A\u0631\u0627\u062C\u0639
+SimpleCLIPanel_DoCommandlineCompletion_Text=\u0627\u0644\u0645\u0637\u0627\u0628\u0642\u0627\u062A \u0627\u0644\u0645\u062D\u062A\u0645\u0644\u0629\:
+AttributeVisualizationPanel_SetInstances_ColorAttrib_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0641\u0626\u0629
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Eighth=\u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064A\u0629\:
+SimpleCLIPanel_RunCommand_Error_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A\u0621 \u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \u062D\u0627\u0644\u064A\u0627.
+GenericObjectEditor_JOptionPaneShowMessageDialog_Text_First=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0644\u0645\u062D\u0631\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0639\u0627\u0645\u0629. \u0645\u0646\u062A\u062C \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \: 
+SimpleCLIPanel_CommandlineCompletion_GetClassMatches_Text_Third=\u060C \u0627\u0644\u0641\u0626\u0629
+GUIChooser_Simple_CLI_Text=\u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629
+GUIChooser_Main_Error_Text_Front=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+SplashWindow_InvokeMain_Exception_InternalError_Text=\u0641\u0634\u0644 \u0641\u064A \u0625\u062D\u0638\u0627\u0631 \u0627\u0644\u0645\u0647\u0645\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629
+PropertyPanel_CreateDefaultPanel_SetToolTipText_Text=\u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0633\u0631 \u0644\u062A\u062D\u0631\u064A\u0631 \u0627\u0644\u062E\u0635\u0627\u0626\u0635  \u0644\u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 ,  \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064A\u0645\u0646 /Alt+Shift+left-cli [...]
+ConverterFileChooser_Main_Text_First=\u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062D\u0641\u0638\!
+MemoryUsagePanel_Error_Second=' - \u062A\u0645 \u0627\u0644\u0646\u062C\u0627\u0647\u0644\!
+GUIChooser_Exit_Text=\u062E\u0631\u0648\u062C
+AttributeSummaryPanel_SetTable_ColNames_Text_Third=\u0639\u062F
+Main_Main_Text_First=\u062A\u0645 \u0637\u0644\u0628 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+LogPanel_AddPopup_LogMessage_Text_Second=/  
+SimpleCLIPanel_ClassRunner_Run_Error_Text_Second=[\u00E2\u0080\u00A6\u062A\u0645 \u0627\u0644\u0627\u0642\u0627\u0641]
+SimpleCLIPanel_RunCommand_Text_First=\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0623\u0645\u0631 \:
+GenericObjectEditor_SaveObject_Exception_JOptionPaneShowMessageDialog_Text=\u062D\u0641\u0638 \u0627\u0644\u0643\u0627\u0626\u0646
+LogWindow_Main_Text_First=a 
+GenericObjectEditor_PaintValue_Rep_Text=\u0644\u0627 \u0634\u064A\u0621
+SaveBuffer_Save_JOptionPane_Text=\u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062C\u0648\u062F
+AttributeSelectionPanel_IncludeAll_JButton_Text=\u062C\u0645\u064A\u0639
+Main_InitGUI_JMenuItemVisualizationROC_SetText_Text=ROC
+PropertySelectorDialog_CreateNodes_Error_Text_Fifth=; \u0627\u0633\u062A\u062B\u0646\u0627\u0621\: 
+LookAndFeel_Exception_JOptionPaneShowMessageDialog_Text_Second=" \u0648 \u064A\u062C\u0628 \u0648\u0636\u0639\u0647\u0627 \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0631\u0626\u064A\u0633\u064A (\u0627\u0644\u0630\u064A \u0647\u0648 "
+GenericObjectEditor_OkBut_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+AttributeSummaryPanel_Main_JFrame_Text=\u0644\u0648\u062D\u0629 \u0627\u0644\u0633\u0645\u0629
+SaveBuffer_Save_Options_3_Text=\u0625\u0644\u063A\u0627\u0621
+GUIChooser_Plot_Text=\u062A\u062E\u0637\u064A\u0637 
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Seventh=\u0646\u062A\u064A\u062C\u0629 \u0627\u0644\u0642\u0633\u0645\u0629\:
+AttributeSummaryPanel_SetHeader_AttributeNOMINAL_Text=\u0627\u0644\u0627\u0633\u0645\u064A
+GenericObjectEditor_ClassSelected_Exception_JOptionPaneShowMessageDialog_Text_Third=\u0641\u0634\u0644 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0641\u0626\u0629
+GenericObjectEditor_GOEPanel_ClassNameLabel_JLabel_Text=\u0644\u0627 \u0634\u064A\u0621
+HierarchyPropertyParser_GoToChild_Exception_Text=\u0627\u0644\u062A\u0639\u064A\u064A\u0646 \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642 \u0623\u0648 \u0648\u0635\u0644 \u0625\u0644\u0649 \u0627\u0644\u0646\u0647\u0627\u064A\u0629
+AttributeVisualizationPanel_Main_Text_Third=\n\u0627\u0644\u0633\u0645\u0627\u062A\: 
+GUIChooser_BayesNetworkEditor_JFrame_Text=\u0645\u062D\u0631\u0631 \u0634\u0628\u0643\u0629  \u0628\u0627\u064A\u0632 
+GenericArrayEditor_Label_JLabel_Text=\u0644\u0627 \u062A\u0633\u062A\u0637\u064A\u0639 \u062A\u0639\u062F\u064A\u0644
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Sixth=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+InstancesSummaryPanel_Lab_JLabel_Text_First=\ \u0627\u0644\u0639\u0644\u0627\u0642\u0629\: 
+GUIChooser_Explorer_Text=\u0627\u0644\u0645\u062A\u0635\u0641\u062D
+PropertyPanel_CreateDefaultPanel_Item_JMenuItem_Text_First=\u0625\u0638\u0647\u0627\u0631  \u0627\u0644\u062E\u0635\u0627\u0626\u0635 ...
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645
+SimpleCLIPanel_RunCommand_Error_Text_Third=java <classname> <args>\n\n Starts the main method of <classname> with the supplied command line arguments (if any).\n The command is started in a separate thread, and may be interrupted with the "break"\n command (friendly), or killed with the "kill" command (unfriendly).\nRedirecting can be done with '>' followed by the file to write to, e.g.\:\n  java some.Class > .
+AttributeVisualizationPanel_GetToolTipText_Text_Twelveth=)</font></html>
+HierarchyPropertyParser_Build_Text=delim\: 
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_First=\u0623\u064A \u0634\u064A\u0621 
+Main_InitGUI_JMenuProgram_SetText_Text=\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C
+AttributeVisualizationPanel_GetToolTipText_Text_First=<html><center><font faceDialog size-1>
+SimpleCLIPanel_RunCommand_Exception_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0627\u0633\u0645 \u0641\u0626\u0629 \u0645\u0639\u064A\u0646\u0629
+GenericObjectEditor_CapabilitiesFilterDialog_OkButton_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+LogWindow_ButtonClear_JButton_Text=\u0645\u0633\u062D
+SimpleCLIPanel_RunCommand_Text_Second=[\u0627\u0644\u0645\u0642\u0627\u0637\u0639\u0629 ...]
+GenericPropertiesCreator_StoreOutputProperties_Text_First=\u062D\u0641\u0638
+HierarchyPropertyParser_Main_Text_Eleventh=\u0627\u0644\u0623\u0628\:  
+SimpleCLIPanel_RunCommand_Error_Text_Nineth=exit\n\n\u0625\u0646\u0647\u0627\u0621 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629.\n
+PropertySheetPanel_SetTarget_HelpText_Text_Second=\n\n
+SetInstancesPanel_CloseBut_JButton_Text=\u0625\u063A\u0644\u0627\u0642
+Main_Main_Text_Third=\u0637\u0628\u0627\u0639\u0629 \u0634\u0627\u0634\u0629 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629 \u0647\u0630\u0647
+SimpleCLIPanel_RunCommand_Text_Third=[\u0627\u064A\u0642\u0627\u0641 ...]
+ConverterFileChooser_ShowOpenDialog_RetVal_JOptionPaneShowConfirmDialog_Text_First=\u0627\u0644\u0645\u0644\u0641 '
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Sixth=\u0645\u062C\u0645\u0648\u0639 \u0627\u0644\u0646\u062A\u0627\u0626\u062C\:
+GUIChooser_SystemInfo_TitleKey_Text=\u0645\u0641\u062A\u0627\u062D
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Sixth=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A \u0644\u0631\u0624\u064A\u062A\u0647 \u0647\u0646\u0627 3
+LogWindow_Main_Error_Text_First=a 
+MemoryUsagePanel_Error_Fourth=' - \u062A\u0645 \u0627\u0644\u0646\u062C\u0627\u0647\u0644\!
+GUIChooser_BoundaryVisualizer_JFrame_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u062D\u062F\u0648\u062F
+SimpleCL_Main_Error_Text=\u0627\u0644\u0634\u0627\u0634\u0629 \u0645\u063A\u0644\u0642\u0629
+ConverterFileChooser_Main_Text_Second=\u062A\u0645 \u0642\u0637\u0639 \u0627\u0644\u062A\u062D\u0645\u064A\u0644  \!
+Main_InitGUI_Title_Text_Second=\u0642\u064A\u0645\u0629
+SimpleCLIPanel_RunCommand_Error_Text_Tenth=\u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0648\u0627\u062D\u062F\u0629 \u0645\u0646\:\n\tjava <classname> <args> [ > file]\n\tbreak\n\tkill\n\tcls\n\thistory\n\texit\n\thelp <command>\n
+MemoryUsagePanel_MemoryMonitor_Update_SetToolTipText_Text=% \u0645\u0633\u062A\u062E\u062F\u0645
+LogWindow_Main_Text_Second=a 
+SortedTableModel_Sort_Text_Firt=\:  \u0644\u0645 \u064A\u062A\u0645 \u062A\u0647\u064A\u0626\u0629 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u062C\u062F\u0648\u0644\!
+CostMatrixEditor_CustomEditor_ClassesPanel_JLabel_Text=\u0627\u0644\u0641\u0626\u0627\u062A \u0647\u064A\:
+DbConnectionDialog_ButtonP_JButton_OK_Text=\u0645\u0648\u0627\u0641\u0642
+AttributeVisualizationPanel_SetInstances_AttributeSTRING_Text=(Str) 
+SimpleCLIPanel_JScrollPane_Text_Fouth=' or '~/'\n(the latter is a shortcut for the home directory).\n<Alt+BackSpace> is used for deleting the text\nin the commandline in chunks.\n
+LookAndFeel_Exception_JOptionPaneShowMessageDialog_Text_Fourth=\u0627\u0644\u0634\u0643\u0644 \u0648\u0627\u0644\u0645\u0638\u0647\u0631
+BrowserHelper_Exception_ErrMsg_Text=\u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0645\u062D\u0627\u0648\u0644\u0629 \u0625\u0637\u0644\u0627\u0642 \u0645\u0633\u062A\u0639\u0631\u0636 \u0648\u064A\u0628\: \n
+LookAndFeel_Main_Text_Second=\u0645\u0644\u0627\u062D\u0638\u0629\: \u064A\u0645\u0643\u0646 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0645\u0638\u0647\u0631 \u0645\u0646 '
+LogPanel_AddPopup_StatusMessage_Text_First=\u0627\u0644\u0630\u0627\u0643\u0631\u0629 (\u0627\u0644\u0641\u0627\u0631\u063A\u0629 / \u0627\u0644\u0645\u062C\u0645\u0648\u0639 / \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 .) \u0628\u0627\u0644\u0628\u0627\u064A\u062A \: 
+GenericObjectEditor_OpenBut_SetToolTipText_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0643\u0648\u0646
+Main_InitGUI_JMenuItemProgramLogWindow_SetText_Text=\u0634\u0627\u0634\u0629 \u0627\u0644\u0633\u062C\u0644
+Main_InitGUI_BrowserHelper_OpenURL_Text_First=http\://www.cs.waikato.ac.nz/~ml/weka/
+PropertySheetPanel_SetTarget_HelpText_Text_First=\u0627\u0644\u0627\u0633\u0645 \n
+ListSelectorDialog_SelectPattern_Pattern_JOptionPaneShowInputDialog_Text=\u0623\u062F\u062E\u0644 \u0627\u0644\u062A\u0639\u0628\u064A\u0631 \u0627\u0644\u0639\u0627\u062F\u064A\u0629 Perl ('.*'  \u0644\u0644\u062C\u0645\u064A\u0639)
+InstancesSummaryPanel_Lab_JLabel_Text_Third=\u0633\u0645\u0627\u062A\:   
+AttributeSummaryPanel_SetHeader_AttributeDEFAULT_TEXT=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
+GenericObjectEditor_GOETreeNode_ToString_Result_Text_Fifth=\ ">
+PropertyPanel_CreateDefaultPanel_Item_JMenuItem_Text_Third=\u0623\u062F\u062E\u0644 \u0627\u0644\u062A\u0643\u0648\u064A\u0646 ...
+GUIChooser_WekaOnSourceforge_Text=\u0648\u064A\u0643\u0627 \u0639\u0644\u0649 Sourceforge
+CostMatrixEditor_CustomEditor_SaveButton_JButton_Text=\u062D\u0641\u0638 ...
+GUIChooser_TreeVisualizer_File_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629 - 
+SimpleCLIPanel_CommandlineCompletion_GetFileMatches_Error_Text=\u0645\u0633\u0627\u0631 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\:
+GUIChooser_ARFF_Files_Text_Front=\u0645\u0644\u0641\u0627\u062A ARFF (*
+GenericArrayEditor_EditBut_JButton_Text=\u062A\u0639\u062F\u064A\u0644
+SysErrLog_LogMessage_Text_First=\u0627\u0644\u0633\u062C\u0644
+AttributeVisualizationPanel_GetToolTipText_Text_Third=, 
+AttributeVisualizationPanel_PaintComponent_G_DrawString_Text_First=\u0627\u0644\u0633\u0645\u0629 \u0644\u064A\u0633\u062A \u0631\u0642\u0645\u064A\u0629 \u0648\u0644\u0627 \u0627\u0633\u0645\u064A\u0629
+GenericArrayEditor_UpdateEditorType_Error_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062D\u0631\u0631 \u0635\u0641\u0627\u062A \u0644\u0644\u0641\u0626\u0629\:
+ViewerDialog_CreateDialog_SetTitle_Text=\u0639\u0627\u0631\u0636
+DbConnectionDialog_Main_Username_Text=\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
+AttributeSummaryPanel_SetHeader_AttributeDATE_Text=\u062A\u0627\u0631\u064A\u062E
+PropertySheetPanel_WasModified_Message_Text=\u062A\u062D\u0630\u064A\u0631\: \u0627\u0639\u062A\u0631\u0636. \u0627\u0644\u0633\u0628\u0628 \u0647\u0648\:
+GenericPropertiesCreator_StoreOutputProperties_Text_Third=\u062A\u062E\u0635\u064A\u0635 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0639\u0637\u0649 \u0645\u0646 \u0642\u0628\u0644 \u0645\u062D\u0631\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0639\u0627\u0645\u0629 \# \u0644\u0645\u062E\u062A\u0644\u0641 \u0627\u0644\u0641\u0626\u0627\u062A \u0627\u0644\u0641\u0627\u0626\u0642\u0629.
+PropertySheetPanel_WasModified_JOptionPaneShowMessageDialog_Second=\u062E\u0644\u0627\u0644 \u0627\u0644\u062A\u0639\u062F\u064A\u0644
+GUIChooser_ROC_AreaUnderROC_Text_Front=(\u0645\u0646\u0637\u0642\u0629 \u062A\u062D\u062A \u0645\u0646\u062D\u0646\u0649 ROC \= 
+GenericArrayEditor_AddBut_JButton_Text=\u0625\u0636\u0627\u0641\u0629
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Eighth=\u0644\u0627 \u064A\u0648\u062C\u062F \u0634\u064A \u0644\u0631\u0624\u064A\u062A\u0647 \u0647\u0646\u0627 3
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+GenericPropertiesCreator_LoadInputProperties_Text_Second='...
+PropertySheetPanel_CapabilitiesHelpDialog_Initialize_SetTitle_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062D\u0648\u0644 \u0627\u0644\u0642\u062F\u0631\u0627\u062A
+PropertySheetPanel_SetTarget_HelpBut_JButton_Text=\u0623\u0643\u062B\u0631
+ListSelectorDialog_Main_DefaultListModel_AddElement_Text_Second=\u0627\u062B\u0646\u0627\u0646
+GenericArrayEditor_DeleteBut_SetToolTipText_Text=\u062D\u0630\u0641  \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F \u0645\u0646 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 
+PropertySheetPanel_SetTarget_HelpText_Text_Fourth=\n\n
+LogPanel_Main_Lp_LogMessage_Text_Second=\u062F\u062C\u0627\u062C \u063A\u064A\u0631 \u062A\u0642\u0644\u064A\u062F\u064A
+Main_Tag_GUI_Text_Second=\u062A\u062E\u0637\u064A\u0637 SDI 
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_Second=\u064A\u062C\u0628 \u0623\u0646 \u062A\u062F\u0639\u0645  <i>\u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644</i> \u0627\u0644\u0642\u062F\u0631\u0627\u062A \u0627\u0644\u062A\u0627\u0644\u064A\u0629 <br>(\u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u0645\u064A\u064A\u0632\u0647\u0627 <font color\="
+GUIChooser_XML_Files_Text=XML \u0645\u0644\u0641\u0627\u062A (*. XML)
+Main_InitGUI_Title_Text_First=\u0645\u0641\u062A\u0627\u062D
+GUIChooser_Visualization_Text=\u0627\u0644\u062A\u0645\u062B\u064A\u0644
+PropertySheetPanel_SetTarget_Error_Text_Sixth=; \u0627\u0633\u062A\u062B\u0646\u0627\u0621\: 
+Main_InitGUI_JMenuItemProgramExit_SetText_Text=\u062E\u0631\u0648\u062C
+Main_InitGUI_JMenuItemToolsArffViewer_SetText_Text=Arff \u0639\u0627\u0631\u0636
+HierarchyPropertyParser_Main_Text_Fifteenth=\u0627\u0644\u062C\u0630\u0631\u061F
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Eighth=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+Main_InitGUI_JMenuItemToolsEnsembleLibrary_SetText_Text=\u0645\u0643\u062A\u0628\u0629 Ensemble 
+HierarchyPropertyParser_Main_Text_Seventh=\u0627\u0644\u0628\u0642\u0627\u0621 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u062D\u0627\u0644\u0629\u061F
+GUIChooser_WekaWiki_URL_Text=http\://weka.wikispaces.com/
+GUIChooser_GraphVisualizer_File_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A - 
+GenericArrayEditor_UpBut_JButton_Text=\u0641\u0648\u0642
+DbConnectionDialog_DbaseURLLab_JLabel_Text=\u0631\u0627\u0628\u0637 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+LogPanel_AddPopup_StatusMessage_Text_Third=/ 
+PropertySheetPanel_SetTarget_HelpText_Text_Third=\u0627\u0644\u0645\u0644\u062E\u0635\n
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_First=t\:
+GUIChooser_WekaHomepage_Text=\u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 \u0641\u064A \u0648\u064A\u0643\u0627
+SimpleCLIPanel_ClassRunner_Exception_NoSuchMethodException_Text_First=main(String[]) method of 
+GenericObjectEditor_JTreePopupMenu_RemoveFilterButton_JButton_Text=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u062A\u0635\u0641\u064A\u0629
+GenericObjectEditor_CreateChooseClassButton_SetButton_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+GUIChooser_Extensions_Text=\u0645\u0644\u062D\u0642\u0627\u062A
+MemoryUsagePanel_Exception_Text=\u0641\u0634\u0644 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0644\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629
+ListSelectorDialog_SelectBut_JButton_Text=\u0627\u062E\u062A\u0627\u0631
+GUIChooser_WekaHomepage_URL_Text=http\://www.cs.waikato.ac.nz/~ml/weka/
+PropertySelectorDialog_Main_Error_Text_First=\u0627\u0644\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629
+AttributeSummaryPanel_NO_SOURCE_Text=\u0644\u0627 \u0634\u064A\u0621
+AttributeVisualizationPanel_PaintComponent_G_DrawString_Text_Third=\u0627\u0644\u0643\u062B\u064A\u0631 \u0645\u0646 \u0627\u0644\u0642\u064A\u0645 \u0644\u0639\u0631\u0636\u0647\u0627.
+GUIChooser_BayesNetEditor_Text=\u0645\u062D\u0631\u0631 \u0634\u0628\u0643\u0629  \u0628\u0627\u064A\u0632
+AttributeVisualizationPanel_PaintComponent_StringWidth_Text_First=\u0627\u0644\u0633\u0645\u0629 \u0644\u064A\u0633\u062A \u0631\u0642\u0645\u064A\u0629 \u0648\u0644\u0627 \u0627\u0633\u0645\u064A\u0629
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Fourth=\u0627\u0644\u0642\u064A\u0645\u0629\: 
+LogPanel_Jf_JFrame_Text=\u0633\u062C\u0644
+PropertyPanel_CreateDefaultPanel_Str_JOptionPaneShowInputDialog_Text=\u0627\u0644\u062A\u0643\u0648\u064A\u0646 ( <classname> [ <options> ] )
+AttributeSummaryPanel_SetHeader_MissingLab_SetText_Text=...
+GUIChooser_Plot_LoadingFile_Error_Text_Front=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+CostMatrixEditor_CustomEditor_DefaultButton_JButton_Text=\u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u0627\u062A
+MemoryUsagePanel_Error_Seventh=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0644\u064A\u0644 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0644\u062A\u062D\u062F\u064A\u062B -
+HierarchyPropertyParser_Main_Text_Sixth=\u0627\u0630\u0647\u0628 \u0623\u0633\u0641\u0644(\u062E\u0637\u0623)\:  
+SaveBuffer_Main_Svb_Save_Text=\u0627\u0644\u0642\u0644\u064A\u0644 \u0645\u0646 \u0646\u0635 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631
+Main_InitGUI_JMenuApplications_SetText_Text=\u0625\u0636\u0627\u0641\u064A
+Main_CreateTitle_NewTitle_Text=\u0648\u064A\u0643\u0627
+GUIChooser_Experimenter_Text=\u0627\u0644\u062A\u062C\u0631\u0628\u0629
+CheckBoxList_Equals_IllegalArgumentException_Text=\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u0646\u0635\u0631 \u0645\u0646 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u062E\u062A\u064A\u0627\u0631 \!
+PropertySheetPanel_WasModified_JOptionPaneShowMessageDialog_Fourth=\u062E\u0637\u0623
+GenericObjectEditor_JTreePopupMenu_FilterButton_JButton_Text=\u062A\u0635\u0641\u064A\u0629
+SelectedTagEditor_Main_Tags_Text_Fifth=\u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u062E\u0627\u0645\u0633
+Main_InitGUI_JMenuItemHelpSystemInfo_SetText_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645
+Main_InitGUI_JMenuVisualization_SetText_Text=\u0627\u0644\u062A\u0645\u062B\u064A\u0644
+PropertySheetPanel_SetTarget_CapabilitiesBut_SetToolTipText_Text=\u0627\u0644\u0642\u062F\u0631\u0627\u062A \u0639\u0644\u0649
+GenericObjectEditor_SaveBut_JButton_Text=\u062D\u0641\u0638 ...
+SimpleCLIPanel_RunCommand_Error_Text_Eighth=\u0627\u0644\u062A\u0627\u0631\u064A\u062E \n  \n \u0637\u0628\u0627\u0639\u0629 \u062C\u0645\u064A\u0639 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0635\u0627\u062F\u0631\u0629. \n
+GenericArrayEditor_InnerActionListener_JOptionPaneShowMessageDialog_Text=\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0646\u0633\u062E\u0629 \u0627\u0644\u0643\u0627\u0626\u0646
+GUIChooser_GraphVisualizer_LoadingFile_Error_Text_Front=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+Main_InitGUI_JMenuItemVisualizationTreeVisualizer_SetText_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+AttributeVisualizationPanel_GetToolTipText_Text_Fourteenth=<BR> [
+ListSelectorDialog_Main_DefaultListModel_AddElement_Text_Fourth=\u0623\u0631\u0628\u0639\u0629
+CheckBoxList_SetModel_IllegalArgumentException_Text=\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646  \u0642\u0627\u0626\u0645\u0629 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \!
+LogPanel_AddPopup_LogMessage_Text_First=\u0627\u0644\u0630\u0627\u0643\u0631\u0629 (\u0627\u0644\u0641\u0627\u0631\u063A\u0629 / \u0627\u0644\u0645\u062C\u0645\u0648\u0639 / \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 .) \u0628\u0627\u0644\u0628\u0627\u064A\u062A \: 
+HierarchyPropertyParser_Main_Text_TwentySixth=)
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_Fourth=</font> don't meet these requirements <br>the ones highlighted  <font color\="
+LogWindow_CreateFrame_JLabel_Text=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u0644\u062D\u062C\u0645
+ConverterFileChooser_ConfigureCurrentConverter_IllegalStateException_Text=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0645\u062D\u0645\u0644 / \u0627\u0644\u0645\u062E\u0632\u0646\!
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Second=barRange\:
+SimpleCLIPanel_ClassRunner_Exception_NoSuchMethodException_Text_Second=\u0647\u064A \u063A\u064A\u0631  public \u0648\u0644\u0627  static.
+Main_InitGUI_BrowserHelper_OpenURL_Text_Second=http\://weka.wikispaces.com/
+AttributeVisualizationPanel_HistCalc_Run_ArrayIndexOutOfBoundsException_Text_Third=\u0637\u0648\u0644\u0647\:\:
+ResultHistoryPanel_Main_Jd_JFrame_AddResult_Text_Third=\u0623\u064A \u0634\u064A\u0621 1
+SaveBuffer_SaveOverwriteAppend_Log_StatusMessage_Text_First=\u0625\u0644\u062D\u0627\u0642 \u0625\u0644\u0649 \u0645\u0644\u0641 ...
+GUIChooser_TreeVisualizer_LoadingFile_Error_Text_End='\:\n
+HierarchyPropertyParser_Main_Text_Nineth=\u0627\u0644\u0646\u0647\u0627\u064A\u0629\u061F
+SetInstancesPanel_SetInstancesFromFileQ_Exception_JOptionPaneShowMessageDialog_Text_First=\u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0645\u0639 URL\: \n 
+SortedTableModel_ToString_Text_First=\u0627\u0644\u0642\u064A\u0645\u0629\=
+SimpleCLIPanel_CommandlineCompletion_GetFileMatches_Text_Second=\u0628\u062D\u062B \u0641\u064A \u0627\u0644\u0645\u0633\u0627\u0631\=
+Main_InitGUI_JMenuItemVisualizationGraphVisualizer_SetText_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+AttributeListPanel_getColumnName_Number_Text=\u0644\u0627.
+SimpleCLIPanel_ClassRunner_Run_Text_First=\u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621 \u0645\u0646 \u0625\u0639\u0627\u062F\u0629 \u062A\u0648\u062C\u064A\u0647 \u0627\u0644\u0645\u062E\u0631\u062C\u0627\u062A \u0625\u0644\u0649 '
+AttributeSelectionPanel_Main_JFrame_Text=\u0644\u0648\u062D\u0629 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0629
+PropertySheetPanel_SetTarget_IntrospectionException_Error_Text=\u0648\u0631\u0642\u0629 \u0627\u0644\u062E\u0635\u0627\u0626\u0635\: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0623\u0645\u0644
+MemoryUsagePanel_ButtonGC_JButton_Text=GC
+GenericObjectEditor_InitGUI_InfoLabel_SetTitle_Text_Sixth=</ FONT> \u0631\u0628\u0645\u0627 \u062A\u0644\u0628\u064A\u062A\u0647\u0627) </ HTML>
+SimpleCLIPanel_RunCommand_Exception_Text_Second=\u0647\u0648 \u0643\u0627\u0626\u0646 \u0628\u0627\u0644\u0641\u0639\u0644 \u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644\u060C \u0627\u0633\u062A\u062E\u062F\u0627\u0645  "\u0643\u0633\u0631 " \u0644\u0648\u0642\u0641 \u0630\u0644\u0643.
+PropertySheetPanel_SetTarget_Error_Text_First=\u062A\u062D\u0630\u064A\u0631\: \u062E\u0627\u0635\u064A\u0629  "
+GUIChooser_Information_Text_End=</font></html>
+HierarchyPropertyParser_Main_Text_Fourteenth=After gotoRoot. leaf?  
+GenericObjectEditor_JOptionPaneShowMessageDialog_Text_Second=\u0645\u062D\u0631\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0639\u0627\u0645
+GenericObjectEditor_SetValue_Error_Text_Second=\u0646\u0648\u0639 \u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\!
+AttributeVisualizationPanel_PaintComponent_StringWidth_Text_Third=\u0627\u0644\u0643\u062B\u064A\u0631 \u0645\u0646 \u0627\u0644\u0642\u064A\u0645 \u0644\u0639\u0631\u0636\u0647\u0627.
+GUIChooser_ARFF_Files_Text_End=)
+HierarchyPropertyParser_Build_Exception_Text=\u0627\u0644\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u0645\u0639\u0637\u0627\u0647 \u0644\u064A\u0633\u062A \u0647\u0631\u0645\u064A\u0629 \u0627\u0644\u0628\u0646\u064A\u0629 \u0645\u0639 \u0627\u0644\u0641\u0648\u0627\u0635\u0644\!
+ListSelectorDialog_Main_DefaultListModel_Error_Text_First=\u0627\u0644\u062D\u0642\u0648\u0644 \u0627\u0644\u0645\u062D\u062F\u062F\u0629
+ViewerDialog_CancelButton_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+GUIChooser_Memory_Usage_List_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629
+Main_InitGUI_TitlePan_Add_JLabel_Text_Fifth=
+GenericObjectEditor_SaveBut_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u062D\u0627\u0644\u064A
+MemoryUsagePanel_Exception_JOptionPaneShowMessageDialog_Text_First=\u0627 \u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u062A\u0645\u0643\u0646 \u0645\u0646 \u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641 \u0627\u0644\u0627\u0639\u062F\u0627\u062F\u0627\u062A \u0644\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629.\n\u064A\u0648\u062C\u062F \u0645\u062B\u0627\u0644 \u0644\u0644\u0645\u0644\u0641 \u0641\u064A \u0645\u0648\u0632 [...]
+AttributeSummaryPanel_Lab_JLabel_Text_First=\u0627\u0644\u0627\u0633\u0645\:
+GenericPropertiesCreator_GenerateOutputProperties_Text_Second='\: 
+PropertySheetPanel_CapabilitiesHelpDialog_AddCapabilities_SetTitle_Text_Fifth=\u0623\u062E\u0631\u0649 --   
+LogPanel_AddPopup_RunGC_JMenuItem_Text=\u062A\u0634\u063A\u064A\u0644 \u062C\u0645\u0639 \u0627\u0644\u0642\u0645\u0627\u0645\u0629
+GUIChooser_SqlViewer_Text=SQL-\u0639\u0627\u0631\u0636
+CostMatrixEditor_SaveMatrix_JOptionPaneShowMessageDialog_Text_Second='\:\n
+GUIChooser_LogWindow_Text=\u0634\u0627\u0634\u0629 \u0627\u0644\u0633\u062C\u0644
+GUIChooser_SystemInfo_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645
+Main_InitGUI_JMenuItemProgramMemoryUsage_SetText_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629
+ListSelectorDialog_SelectPattern_Exception_JOptionPaneShowInputDialog_Text_Second=' \u062A\u0639\u0628\u064A\u0631 \u0639\u0627\u062F\u064A \u0645\u0646 \u0646\u0648\u0639 Perl \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\!
+LogPanel_AddPopup_AvailMem_JMenuItem_Text=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u0630\u0627\u0643\u0631\u0629
+HierarchyPropertyParser_Main_Text_TwentySeventh=\u0648\u0647\u0646\u0627\u0643 \u0637\u0631\u064A\u0642\u0629 \u0623\u062E\u0631\u0649 \u0644\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u062C\u0630\u0631\:
+GUIChooser_SystemInfo_TitleValue_Text=\u0642\u064A\u0645\u0629
+ComponentHelper_ShowInputBox_Title_Text=\u0645\u062F\u062E\u0644\u0627\u062A ...
+Main_InitGUI_JMenuItemVisualizationBoundaryVisualizer_SetText_Text=\u0645\u0645\u062B\u0644 \u0627\u0644\u062D\u062F\u0648\u062F
+GenericObjectEditor_Exception_JOptionPaneShowMessageDialog_Text_Fifth=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0647\u064A\u0626\u0629 \u0645\u0646\u062A\u062C \u0627\u0644\u062E\u0635\u0627\u0626\u0635 \u0627\u0644\u0639\u0627\u0645\u0629 . \u0648\u0642\u062F \u0623\u0646\u062A\u062C \u0647\u0630\u0627 \u0627\u0644\u0627\u0633\u062A\u062B\u0646\u0627\u0621 \: \n
+MemoryUsagePanel_Error_Fifth=\u0644\u0648\u062D\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0623\u0628\u0639\u0627\u062F - 
+LogPanel_AddPopup_LogMessage_Text_Third=/  
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Second='\:\n
+GenericObjectEditor_RegisterEditors_Exception_Error_Text_First=\u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u0627\u0644\u062A\u0633\u062C\u064A\u0644
+Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text=\u062E\u0637\u0623 \u0641\u064A \u0625\u0646\u0634\u0627\u0621 \u0648\u0627\u062C\u0647\u0629 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0628\u0633\u064A\u0637\u0629 \: \n
+PropertySelectorDialog_Main_Error_Text_Second=\u0623\u0644\u063A\u064A
+HierarchyPropertyParser_Main_Text_First=\u0627\u0644\u0641\u0627\u0635\u0644\:
+GUIChooser_Memory_Usage_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629
+SaveBuffer_SaveOverwriteAppend_Log_StatusMessage_Text_Third=\u0645\u0648\u0627\u0641\u0642
+PropertySelectorDialog_Text=\u0627\u062E\u062A\u0631 \u062E\u0627\u0635\u064A\u0629
+SetInstancesPanel_SetInstancesFromFileQ_Exception_JOptionPaneShowMessageDialog_Text_Third=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0648\u0642\u062A \u060C \n \u062D\u0627\u0644\u064A\u0627 \u0645\u0634\u063A\u0648\u0644 \u0645\u0639 \u0639\u0645\u0644\u064A\u0627\u062A \u0625\u062F\u062E\u0627\u0644 \u0648 \u0625\u062E\u0631\u0627\u062C \u0623\u062E\u0631\u0649
+GenericObjectEditor_InitGUI_SetTitle_Text=\u0642\u062F\u0631\u0627\u062A \u0627\u0644\u062A\u0635\u0641\u064A\u0629 ...
+ListSelectorDialog_Main_DefaultListModel_AddElement_Text_Fifth=\u062E\u0645\u0633\u0629
+Main_ListOptions_Option_Text_First=\u062A\u062D\u062F\u064A\u062F \u062A\u0635\u0645\u064A\u0645 \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \:\n
+AttributeSelectionPanel_GetColumnName_Text_First=\u0644\u0627.
+AttributeSummaryPanel_SetHeader_AttributeNUMERIC_Text=\u0631\u0642\u0645\u064A\u0629
+AttributeListPanel_Main_AttributeListPanel_Text=\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062E\u0635\u0627\u0626\u0635
+SimpleCLIPanel_CommandlineCompletion_GetClassMatches_Text_Fourth=\u0628\u062D\u062B \u0639\u0646 \:'
+GUIChooser_ROC_AddingPlot_Error_Text=\u062E\u0637\u0623 \u0641\u064A \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629\: \n
+PropertySheetPanel_SetTarget_Error_Text_Third=\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u062C\u0627\u0648\u0632
+PropertySheetPanel_WasModified_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623
+AttributeListPanel_getColumnName_Name_Text=\u0627\u0644\u0627\u0633\u0645
+GUIChooser_ROC_LoadingFile_Error_Text_Front=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641  '
+HierarchyPropertyParser_Main_Text_Sixteenth=\u06271\u0647\u0628 \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644 (\u0627\u0644\u0635\u062D\u064A\u062D)\:  
+GUIChooser_WekaExplorer_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 
+GUIChooser_Main_Error_Text_End=\n \u0627\u0644\u062E\u0631\u0648\u062C ...
+SimpleCLIPanel_CommandlineCompletion_GetCommonPrefix_Text_Second='
+SimpleCLIPanel_CommandlineCompletion_GetClassMatches_Text_Fifth=\u0627\u0644\u0641\u0626\u0629/\u0627\u0644\u062D\u0632\u0645\u0629 \u062A\u0637\u0627\u0628\u0642\:
+HierarchyPropertyParser_Main_Text_TwentyFirst=\u0627\u0644\u0642\u064A\u0645\u0629\: 
+Main_InitGUI_WekaPan_JPanel_SetToolTipText_Text=\u0648\u064A\u0643\u0627\u060C \u0637\u0627\u0626\u0631 \u0645\u0648\u0627\u0637\u0646 \u0645\u0646 \u0646\u064A\u0648\u0632\u064A\u0644\u0646\u062F\u0627
+GenericPropertiesCreator_Main_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\:
+CostMatrixEditor_OpenMatrix_JOptionPaneShowMessageDialog_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u0644\u0641 '
+HierarchyPropertyParser_Main_Text_Nineteenth=\u0627\u0644\u0646\u0647\u0627\u064A\u0629\u061F
+MemoryUsagePanel_Exception_JOptionPaneShowMessageDialog_Text_Third=\ ") \n \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0630\u064A \u0628\u062F\u0623\u062A \u0645\u0646\u0647 \u062C\u0627\u0641\u0627\n
+LogPanel_StatusLab_SetBorder_BorderFactoryCreateCompoundBorder_Text=\u0627\u0644\u062D\u0627\u0644\u0629
+PropertyPanel_CreateDefaultPanel_Exception_Text_Second=\u062E\u0637\u0623 ...
+AttributeSummaryPanel_Lab_JLabel_Text_Third=\u0645\u0641\u0642\u0648\u062F\:
+GenericArrayEditor_DownBut_JButton_Text=\u0627\u0644\u0623\u0633\u0641\u0644
+JListHelper_MoveItems_Error_Text_First=\: \u0627\u062A\u062C\u0627\u0647 '
+GenericArrayEditor_AddBut_SetToolTipText_Text=\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u062D\u0627\u0644\u064A \u0625\u0644\u0649 \u0627\u0644\u0642\u0627\u0626\u0645\u0629
diff --git a/src/main/java/weka/gui/sql/event/messages/messages_ar.properties b/src/main/java/weka/gui/sql/event/messages/messages_ar.properties
new file mode 100644
index 0000000..baa5771
--- /dev/null
+++ b/src/main/java/weka/gui/sql/event/messages/messages_ar.properties
@@ -0,0 +1,2 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
diff --git a/src/main/java/weka/gui/sql/messages/messages_ar.properties b/src/main/java/weka/gui/sql/messages/messages_ar.properties
new file mode 100644
index 0000000..954c58a
--- /dev/null
+++ b/src/main/java/weka/gui/sql/messages/messages_ar.properties
@@ -0,0 +1,57 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+SqlViewerDialog_Main_Text_Fourth=\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631 \=
+ConnectionPanel_ButtonConnect_JButton_Text=\u0631\u0628\u0637
+QueryPanel_ButtonExecute_JButton_Text=\u062A\u0646\u0641\u064A\u0630
+SqlViewer_Main_JFrame_Text=\u0641\u064A \u0648\u064A\u0643\u0627 SQL-\u0639\u0627\u0631\u0636
+ResultPanel_GetNextTabName_Text=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645
+ResultPanel_ButtonCloseAll_JButton_Text=\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062C\u0645\u064A\u0639
+ResultSetTable_GetTableHeader_SetToolTipText_Text=\u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0645\u0624\u0634\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0627\u0644\u0623\u064A\u0633\u0631 \u0644\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0639\u0645\u0648\u062F \u0628\u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0645\u062B\u0627\u0644\u064A
+ResultPanel_CreatePanel_ButtonOptWidth_SetToolTipText_Text=\u062D\u0633\u0627\u0628 \u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u0648\u062F \u0627\u0644\u0623\u0645\u062B\u0644 \u0644\u0644\u062C\u062F\u0648\u0644 \u0627\u0644\u062D\u0627\u0644\u064A
+SqlViewer_CreatePanel_Panel_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u0631\u0628\u0637
+ResultPanel_ButtonCopyQuery_JButton_Text=\u0625\u0639\u0627\u062F\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645
+SqlViewer_QueryExecuted_InfoPanel_Text_Fifth=\u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629).
+SqlViewer_ConnectionChange_InfoPanel_Text_Second=\u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0628\:  
+SqlViewer_QueryExecuted_InfoPanel_Text_Second=\u0627\u0633\u062A\u062B\u0646\u0627\u0621\: 
+QueryPanel_ButtonHistory_JButton_Text=\u0627\u0644\u0633\u062C\u0644 ...
+InfoPanel_CreatePanel_ButtonClear_JButton_Text=\u0645\u0633\u062D
+ResultSetTableCellRenderer_GetTableCellRendererComponent_SetToolTipText_Text=\u0641\u0627\u0631\u063A
+SqlViewer_QueryExecuted_InfoPanel_Text_Third=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645\: 
+SqlViewer_ConnectionChange_InfoPanel_Text_First=\u0641\u0635\u0644 \u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0645\u0639\:
+ConnectionPanel_ButtonHistory_JButton_Text=\u0627\u0644\u0633\u062C\u0644 ...
+SqlViewerDialog_Main_Text_First=\u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0631\u0627\u062C\u0639\u0629 \=  
+ConnectionPanel_HISTORY_NAME_Text=\u0627\u062A\u0635\u0627\u0644
+SqlViewerDialog_Main_Text_Second=\u0627\u0644\u0631\u0627\u0628\u0637      \=  
+SqlViewer_QueryExecuted_InfoPanel_Text_Seventh=\u0635\u0641\u0648\u0641 \u0645\u062E\u062A\u0627\u0631\u0629.
+SqlViewer_SaveHistory_Store_Text=SQL-\u0639\u0627\u0631\u0636-\u0627\u0644\u062A\u0627\u0631\u064A\u062E
+QueryPanel_CreatePanel_Panel3_JLabel_Text=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u0644\u0635\u0641\u0648\u0641
+QueryPanel_HISTORY_NAME_Text=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645
+SqlViewer_WIDTH_Text=\u0639\u0631\u0636
+SqlViewer_QueryExecuted_InfoPanel_Text_Sixth=\u0639\u062F\u062F \u063A\u064A\u0631 \u0645\u062D\u062F\u062F \u0645\u0646 \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629 ( \u0628\u0633\u0628\u0628 \u0645\u062D\u062F\u062F\u0627\u062A  \u0628\u0631\u0646\u0627\u0645\u062C \u062A\u0634\u063A\u064A\u0644 JDBC )
+SqlViewerDialog_SQL_Viewer_Text=SQL-\u0639\u0627\u0631\u0636
+InfoPanel_CreatePanel_ButtonCopy_JButton_Text=\u0646\u0633\u062E
+ResultPanel_CreatePanel_ButtonCopyQuery_SetToolTipText_Text=\u0646\u0633\u062E \u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645 \u0645\u0646 \u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u0628\u0648\u064A\u0628 \u0627\u0644\u0645\u062D\u062F\u062F\u0629 \u062D\u0627\u0644\u064A\u0627 \u0627\u0644\u0649 \u062D\u0642\u0644 \u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645.
+SqlViewerDialog_ButtonCancel_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+ConnectionPanel_ButtonDatabase_JButton_Text=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 ...
+SqlViewerDialog_Main_Text_Fifth=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645    \= 
+ResultPanel_ButtonOptWidth_JButton_Text=\u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0623\u0645\u062B\u0644
+SqlViewer_ConnectionChange_InfoPanel_Text_Third=\u0627\u0633\u062A\u062B\u0646\u0627\u0621\: 
+SqlViewer_Main_Error_Text_First=\u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0631\u0648\u0636\u0629\:
+SqlViewerDialog_Main_Text_Third=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645     \=  
+ResultPanel_ButtonClose_JButton_Text=\u0625\u063A\u0644\u0627\u0642
+SqlViewer_Main_Error_Text_Second=\n \u0627\u0644\u062E\u0631\u0648\u062C
+SqlViewerDialog_ButtonOK_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+SqlViewer_HISTORY_FILE_Text=SqlViewerHistory.props
+QueryPanel_CreatePanel_SpinnerMaxRows_SetToolTipText_Text=\u0645\u0639 \u0635\u0641\u0631 \u064A\u062A\u0645 \u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0643\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u0648\u0641
+SqlViewer_Main_Log_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+ResultSetTableModel_GetColumnName_Text=\u0633\u0637\u0631 
+QueryPanel_MAX_ROWS_Text=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u0644\u0635\u0641\u0648\u0641
+SqlViewer_QueryExecuted_InfoPanel_Text_Fourth=\u0635\u0641\u0648\u0641 \u0645\u062E\u062A\u0627\u0631\u0629 ( 
+SqlViewer_CreatePanel_Panel2_BorderFactoryCreateTitledBorder_Text_Second=\u0627\u0644\u0646\u062A\u064A\u062C\u0629
+SqlViewer_HEIGHT_Text=\u0627\u0631\u062A\u0641\u0627\u0639
+QueryPanel_ButtonClear_JButton_Text=\u0645\u0633\u062D
+SqlViewer_CreatePanel_Panel2_BorderFactoryCreateTitledBorder_Text_First=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645
+SqlViewerDialog_ResultChanged_Text=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645 \u0627\u0644\u062D\u0627\u0644\u064A\:
+ConnectionPanel_LabelURL_JLabel_Text=\u0627\u0644\u0631\u0627\u0628\u0637
+SqlViewer_QueryExecuted_InfoPanel_Text_First=\u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645\: 
+SqlViewer_CreatePanel_Panel_BorderFactoryCreateTitledBorder_Text_Second=\u0645\u0639\u0644\u0648\u0645\u0627\u062A
diff --git a/src/main/java/weka/gui/streams/messages/messages_ar.properties b/src/main/java/weka/gui/streams/messages/messages_ar.properties
new file mode 100644
index 0000000..33a2838
--- /dev/null
+++ b/src/main/java/weka/gui/streams/messages/messages_ar.properties
@@ -0,0 +1,66 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+InstanceLoader_LoadThread_Run_StatusBut_SetText_Text=\u0625\u0628\u062F\u0623
+InstanceJoiner_OutputPeek_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u0631\u064A\u0641 \u062A\u0646\u0633\u064A\u0642 \u0644\u0644\u0645\u062E\u0631\u062C\u0627\u062A \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+InstanceLoader_NotifyInstanceProduced_Error_Text=InstanceLoader\:\:notifyInstanceProduced()
+InstanceJoiner_OutputFormat_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u0631\u064A\u0641 \u062A\u0646\u0633\u064A\u0642 \u0644\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+InstanceLoader_LoadThread_Run_Error_Text_Third=InstanceLoader\:\:LoadThread\:\:run() - read instance
+InstanceSavePanel_InputFormat_Error_Text_First=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A ( ) \n
+InstanceJoiner_InstanceProduced_InstanceEventDEFAULT_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 () - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0646\u0648\u0639 \u0627\u0644\u062D\u062F\u062B
+InstanceSavePanel_InstanceProduced_Error_Text=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 ( ) - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0645\u0635\u062F\u0631 \u0646\u0648\u0639 \u0627\u0644\u0643\u0627\u0626\u0646
+InstanceViewer_InstanceProduced_Error_Text=InstanceViewer\:\:instanceProduced() - Unknown source object type
+InstanceCounter_Count_Lab_JLabel_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0644\u0627\u062A
+InstanceTable_InstanceProduced_Error_Text=InstanceTable\:\:instanceProduced() - Unknown source object type
+InstanceJoiner_SecondInstanceProduced_InstanceEventBATCH_FINISHED_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 () - \u0646\u0647\u0627\u064A\u0629 \u062F\u0641\u0639\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+InstanceTable_InstanceProduced_InstanceEventDEFAULT_Error_Text=InstanceTable\:\:instanceProduced() - unknown event type
+InstanceJoiner_InstanceProduced_InstanceEventBATCH_FINISHED_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 () - \u0646\u0647\u0627\u064A\u0629 \u062F\u0641\u0639\u0629 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+InstanceSavePanel_InputFormat_Count_Lab_SetText_First=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A ( ) \n
+InstanceSavePanel_BatchFinished_Error_Text_First=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u062F\u0641\u0639\u0629 ( )
+InstanceCounter_Input_Count_Lab_SetText_Text_Second=\u062D\u0627\u0644\u0627\u062A
+InstanceSavePanel_Input_Count_Lab_SetText_Second=\u062D\u0627\u0644\u0627\u062A
+InstanceJoiner_BatchFinished_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u0631\u064A\u0641 \u062A\u0646\u0633\u064A\u0642 \u0644\u0644\u0645\u062F\u062E\u0644\u0627\u062A
+InstanceSavePanel_InputFormat_Error_Text_Third=InstanceSavePanel\:\:inputFormat()\: 
+InstanceLoader_StartBut_JButton_Add_Text_First=\u063A\u0631\u0628
+InstanceSavePanel_Count_Lab_Label_Text=0 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+InstanceTable_Input_Error_Text_First=InstanceTable\:\:input(
+InstanceLoader_LoadThread_Run_Error_Text_Second=InstanceLoader\:\:LoadThread\:\:run() - Instances opened from\: 
+InstanceCounter_Input_Count_Lab_SetText_Text_First=
+InstanceJoiner_NotifyInstanceProduced_Error_Text_First=\:\: \u0627\u0644\u0627\u0639\u0644\u0627\u0645 \u0628\u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 ( )
+InstanceJoiner_SecondInstanceProduced_InstanceEventINSTANCE_AVAILABLE_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 () - \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0645\u062A\u0648\u0641\u0631\u0629
+InstanceCounter_InstanceProduced_Error_Text=InstanceCounter\:\:instanceProduced() - Unknown source object type
+InstanceViewer_InstanceProduced_InstanceEventDEFAULT_Error_Text=InstanceViewer\:\:instanceProduced() - unknown event type
+InstanceSavePanel_InputFormat_Count_Lab_SetText_Second=\u062D\u0627\u0644\u0627\u062A
+InstanceLoader_LoadThread_Run_StartBut_SetText_Text=\u062A\u0648\u0642\u0641
+InstanceTable_Input_Error_Text_Second=)
+InstanceSavePanel_InputFormat_Error_Text_Second=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A ( ) - \u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0645\u0643\u062A\u0648\u0628
+InstanceJoiner_SecondInstanceProduced_Error_Text_First=\:\:secondInstanceProduced() - Input received from second stream before first stream finished
+InstanceViewer_Input_Error_Text_First=InstanceViewer\:\:input(
+InstanceCounter_InstanceProduced_InstanceEventDEFAULT_Error_Text=InstanceCounter\:\:instanceProduced() - unknown event type
+InstanceJoiner_InstanceProduced_InstanceEventFORMAT_AVAILABLE_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 () - \u0627\u0644\u062A\u0646\u0633\u064A\u0642 \u0645\u062A\u0627\u062D
+InstanceViewer_BatchFinished_Error_Text=InstanceViewer\:\:batchFinished()
+InstanceSavePanel_Count_Lab_Label_Add_Text=\u0627\u0644\u0634\u0631\u0642
+InstanceLoader_StartBut_JButton_Text=\u0625\u0628\u062F\u0623
+InstanceCounter_InputFormat_Count_Lab_SetText_Text_First=
+InstanceTable_BatchFinished_Error_Text=InstanceTable\:\:batchFinished()
+InstanceCounter_Input_Error_Text_Second=)
+InstanceLoader_StartBut_JButton_Add_Text_Second=\u0648\u0633\u0637
+InstanceCounter_InstanceProduced_InstanceEventBATCH_FINISHED_Error_Text=InstanceCounter\:\:instanceProduced() - End of instance batch
+InstanceJoiner_SecondInstanceProduced_Error_Text_Second=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 () - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0645\u0635\u062F\u0631 \u0646\u0648\u0639 \u0627\u0644\u0643\u0627\u0626\u0646
+InstanceCounter_Input_Error_Text_First=InstanceCounter\:\:input(
+InstanceJoiner_NotifyInstanceProduced_Exception_Text=\u0645\u0634\u0643\u0644\u0629\: notifyInstanceProduced()  \u062A\u0645 \u0645\u0646\u0627\u062F\u0627\u062A \n\u0645\u0639 INSTANCE_AVAILABLE, ()\n\u0644\u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0627\u062D\u062A\u0648\u062A \u0639\u0644\u0649 \u0627\u0633\u062A\u062B\u0646\u0627\u0621\:
+InstanceLoader_LoadThread_Run_Error_Text_First=InstanceLoader\:\:LoadThread\:\:run()
+InstanceJoiner_InstanceProduced_InstanceEventINSTANCE_AVAILABLE_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 () - \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0645\u062A\u0648\u0641\u0631\u0629
+InstanceCounter_InputFormat_Error_Text_First=InstanceCounter\:\:inputFormat()
+InstanceLoader_OutputFormat_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u0631\u064A\u0641 \u062A\u0646\u0633\u064A\u0642 \u0644\u0644\u0645\u062E\u0631\u062C\u0627\u062A
+InstanceSavePanel_Input_Error_Text_Second=)
+InstanceTable_InputFormat_Error_Text=InstanceTable\:\:inputFormat()\n
+InstanceCounter_InputFormat_Count_Lab_SetText_Text_Second=\u062D\u0627\u0644\u0627\u062A
+InstanceJoiner_SecondInstanceProduced_InstanceEventFORMAT_AVAILABLE_Error_Text=\:\:secondInstanceProduced() - incompatible instance streams
+InstanceJoiner_Input_Exception_Text=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u0631\u064A\u0641 \u062A\u0646\u0633\u064A\u0642 \u0644\u0644\u0645\u062F\u062E\u0644\u0627\u062A
+InstanceViewer_Input_Error_Text_Second=)
+InstanceSavePanel_Input_Count_Lab_SetText_First=
+InstanceViewer_InputFormat_Error_Text=InstanceViewer\:\:inputFormat()\n
+InstanceJoiner_SecondInstanceProduced_InstanceEventDEFAULT_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 () - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0646\u0648\u0639 \u0627\u0644\u062D\u062F\u062B
+InstanceJoiner_InstanceProduced_Error_Text=\:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 () - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0645\u0635\u062F\u0631 \u0646\u0648\u0639 \u0627\u0644\u0643\u0627\u0626\u0646
+InstanceSavePanel_Input_Error_Text_First=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A (
+InstanceSavePanel_InstanceProduced_InstanceProducerDEFAULT_Error_Text=\u0644\u0648\u062D\u0629 \u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \:\: \u0627\u0646\u062A\u0627\u062C \u0627\u0644\u062D\u0627\u0644\u0629 ( ) - \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0646\u0648\u0639 \u0627\u0644\u062D\u062F\u062B
diff --git a/src/main/java/weka/gui/treevisualizer/messages/messages_ar.properties b/src/main/java/weka/gui/treevisualizer/messages/messages_ar.properties
new file mode 100644
index 0000000..c843917
--- /dev/null
+++ b/src/main/java/weka/gui/treevisualizer/messages/messages_ar.properties
@@ -0,0 +1,216 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+TreeBuild_AttrList_Text_Eighth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0633\u0645\u064A\u0629
+TreeVisualizer_Size14_JRadioButtonMenuItem_Size14_Text_Second=\u062D\u062C\u0645 14
+TreeVisualizer_Size22_JRadioButtonMenuItem_Size22_Text_Second=\u062D\u062C\u0645 22
+TreeVisualizer_AnimateScaling_Text=\u0627\u0644\u0645\u0648\u0642\u062A \u0644\u0645 \u064A\u0646\u062A\u0647\u064A \u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0645\u0646\u0627\u0633\u0628
+TreeVisualizer_Size20_JRadioButtonMenuItem_Size20_Text_First=\u062D\u062C\u0645 20
+TreeBuild_GetShape_Diamond_Text=\u0627\u0644\u0645\u0639\u064A\u0646
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size2_Text=\u062D\u062C\u0645 2
+TreeVisualizer_Size8_JRadioButtonMenuItem_Size8_Text_First=\u062D\u062C\u0645 8
+TreeVisualizer_AutoScale_JMenuItem_SetActionCommand_Text_First=\u0645\u0642\u064A\u0627\u0633 \u062A\u0644\u0642\u0627\u0626\u064A
+TreeVisualizer_TopN_JMenuItem_Text_Second=\u0645\u0631\u0643\u0632 \u0639\u0644\u0649 \u0623\u0639\u0644\u0649 \u0639\u0642\u062F\u0629
+TreeVisualizer_Size4_JRadioButtonMenuItem_SetActionCommand_Size4_Text_First=\u062D\u062C\u0645 4
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Eighth=\u062E\u0637\u0623\!
+TreeVisualizer_SelectFont_JMenu_Text_Second=\u062D\u062F\u062F \u0627\u0644\u062E\u0637
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size10_Text=\u062D\u062C\u0645 10
+TreeBuild_StmtList_Text=expects a STMT_LIST item or '}'
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size6_Text=\u062D\u062C\u0645 6
+TreeBuild_AttrList_NextToken_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0633\u0645\u0627\u062A 
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size20_Text=\u062D\u062C\u0645 20
+TreeVisualizer_Size22_JRadioButtonMenuItem_SetActionCommand_Size22_Text_First=\u062D\u062C\u0645 22
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size14_Text=\u062D\u062C\u0645 14
+TreeBuild_NodeId_Text_Second=\u062D\u062F\u062B \u062E\u0637\u0623 \u0641\u064A \u0645\u0639\u0631\u0641 \u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0621
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size24_Text=\u062D\u062C\u0645 24
+TreeVisualizer_Size6_JRadioButtonMenuItem_Size6_Text_First=\u062D\u062C\u0645 6
+TreeVisualizer_TopN_JMenuItem_Text_First=\u0645\u0631\u0643\u0632 \u0639\u0644\u0649 \u0623\u0639\u0644\u0649 \u0639\u0642\u062F\u0629
+TreeBuild_AttrList_NextToken_Text_Nineth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644
+TreeVisualizer_ActionPerformed_AutoScale_Text=\u0645\u0642\u064A\u0627\u0633 \u062A\u0644\u0642\u0627\u0626\u064A
+TreeBuild_AttrStmt_StSval_Node_Text=\u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0621
+TreeBuild_AttrStmt_Text_Third=expected 'graph' or 'node' or 'edge'
+TreeBuild_Graph_Error_Text_Second=\u0645\u062A\u0648\u0642\u0639 \u0648\u062C\u0648\u062F \u0627\u0633\u0645 \u0644\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size18_Text=\u062D\u062C\u0645 18
+TreeBuild_AttrList_NextToken_Text_Fifth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+TreeBuild_AttrList_StSval_FontSize_Text=\u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+TreeVisualizer_Size18_JRadioButtonMenuItem_SetActionCommand_Size18_Text_Second=\u062D\u062C\u0645 18
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Third=\u062E\u0637\u0623 \u060C \u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0642\u0627\u0621 \u0645\u062D\u062F\u062F\u0629 \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u0649 .
+TreeVisualizer_Size8_JRadioButtonMenuItem_Size8_Text_Second=\u062D\u062C\u0645 8
+TreeVisualizer_Size12_JRadioButtonMenuItem_SetActionCommand_Size12_Text_Second=\u062D\u062C\u0645 12
+TreeVisualizer_RemChildren_JMenuItem_SetActionCommand_Text_Second=\u0627\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeVisualizer_ActionPerformed_FitToScreen_Text=\u0627\u0644\u0645\u0644\u0627\u0626\u0645\u0629 \u0645\u0639 \u0627\u0644\u0634\u0627\u0634\u0629
+TreeVisualizer_Size10_JRadioButtonMenuItem_SetActionCommand_Size10_Text_First=\u062D\u062C\u0645 10
+TreeVisualizer_Size4_JRadioButtonMenuItem_Size4_Text_First=\u062D\u062C\u0645 4
+TreeVisualizer_Size24_JRadioButtonMenuItem_SetActionCommand_Size24_Text_Second=\u062D\u062C\u0645 24
+TreeBuild_AttrList_NextToken_Text_Thirteenth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+TreeVisualizer_Size22_JRadioButtonMenuItem_Size22_Text_First=\u062D\u062C\u0645 22
+TreeVisualizer_Size6_JRadioButtonMenuItem_Size6_Text_Second=\u062D\u062C\u0645 6
+TreeBuild_EdgeStmt_Text=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0647\u062F\u0641 \u0645\u0646 \u0627\u0644\u062D\u0627\u0641\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Eighteenth=\u0639\u0630\u0631\u0627 \!
+TreeBuild_AttrList_Text_Thirteenth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+TreeVisualizer_Size4_JRadioButtonMenuItem_Size4_Text_Second=\u062D\u062C\u0645 4
+TreeVisualizer_RemChildren_JMenuItem_Text_Second=\u0627\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeBuild_AttrList_StSval_Data_Text=\u0628\u064A\u0627\u0646\u0627\u062A
+TreeBuild_AttrList_NextToken_Text_Tenth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0646\u0645\u0637
+TreeBuild_AttrList_NextToken_Text_Seventh=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0633\u0645\u064A\u0629
+TreeVisualizer_TopN_JMenuItem_SetActionCommand_Text_Second=\u0645\u0631\u0643\u0632 \u0639\u0644\u0649 \u0623\u0639\u0644\u0649 \u0639\u0642\u062F\u0629
+TreeBuild_AttrList_NextToken_Text_Fourth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0648\u0646 \u0627\u0644\u062E\u0637
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Sixteenth=\u062E\u0637\u0623\!
+TreeVisualizer_Size10_JRadioButtonMenuItem_Size10_Text_Second=\u062D\u062C\u0645 10
+TreeVisualizer_Size2_JRadioButtonMenuItem_Size2_Text_Second=\u062D\u062C\u0645 2
+TreeBuild_AttrList_StSval_Shape_Text=\u062A\u0634\u0643\u064A\u0644
+TreeBuild_AttrStmt_StSval_Graph_Text=\u0631\u0633\u0645 \u0628\u064A\u0627\u0646\u064A
+TreeBuild_NextToken_StTT_NUMBER_Text=got a number , 
+TreeVisualizer_Size24_JRadioButtonMenuItem_Size24_Text_First=\u062D\u062C\u0645 24
+TreeVisualizer_ActionPerformed_CreateChildNodes_Text=\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0642\u062F\u0629 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Fourteenth=\u0639\u0630\u0631\u0627 \!
+TreeVisualizer_ActionPerformed_RemoveChildNodes_Text=\u0627\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeBuild_AttrList_NextToken_Text_Sixth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0633\u0645\u064A\u0629
+TreeBuild_AttrList_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u0646
+TreeBuild_Graph_NextToken_Text_Third=\u0627\u0644\u0645\u062A\u0648\u0642\u0639 '{'
+TreeVisualizer_BorderFactoryCreateTitledBorder_Text_Second=\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_Accept_JMenuItem_SetActionCommand_Text_First=\u0627\u0642\u0628\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_Size10_JRadioButtonMenuItem_Size10_Text_First=\u062D\u062C\u0645 10
+TreeVisualizer_BorderFactoryCreateTitledBorder_Text_First=\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+TreeVisualizer_ClassifyChild_JMenuItem_Text_First=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 ...
+TreeVisualizer_Size14_JRadioButtonMenuItem_SetActionCommand_Size14_Text_First=\u062D\u062C\u0645 14
+TreeBuild_GetStyle_Filled_Text=\u0645\u0639\u0628\u0623
+TreeBuild_AttrList_NextToken_Text_Fifth_Alpha=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+TreeVisualizer_Size1_JRadioButtonMenuItem_Size1_Text_First=\u062D\u062C\u0645 1
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Nineteenth=\u062E\u0637\u0623 \u060C \u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0642\u0627\u0621 \u0645\u062D\u062F\u062F\u0629 \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u0649 .
+TreeVisualizer_Size2_JRadioButtonMenuItem_Size2_Text_First=\u062D\u062C\u0645 2
+TreeBuild_AttrList_Text_Fifth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+TreeBuild_AttrList_Text_Nineth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644
+TreeVisualizer_Accept_JMenuItem_SetActionCommand_Text_Second=\u0627\u0642\u0628\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_SendInstances_JMenuItem_Text=\u0625\u0636\u0627\u0641\u0629 \u062D\u0627\u0644\u0627\u062A \u0625\u0644\u0649 \u0627\u0644\u0639\u0627\u0631\u0636
+TreeVisualizer_Size24_JRadioButtonMenuItem_Size24_Text_Second=\u062D\u062C\u0645 24
+TreeVisualizer_Size16_JRadioButtonMenuItem_Size16_Text_Second=\u062D\u062C\u0645 16
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Fifteenth=\u062E\u0637\u0623 \u060C \u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0642\u0627\u0621 \u0645\u062D\u062F\u062F\u0629 \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u0649 .
+TreeVisualizer_Size1_JRadioButtonMenuItem_SetActionCommand_Size1_Text_Second=\u062D\u062C\u0645 1
+TreeBuild_AttrList_NextToken_Text_Eleventh=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0646\u0645\u0637
+TreeVisualizer_ActionPerformed_AcceptTheTree_Text=\u0627\u0642\u0628\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_Size6_JRadioButtonMenuItem_SetActionCommand_Size6_Text_Second=\u062D\u062C\u0645 6
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Nineth=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u0623\u064A \u0634\u062C\u0631\u0629 \u0642\u0631\u0627\u0631\u0627\u062A \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u064A\u0647\u0627.
+TreeBuild_AttrStmt_NextToken_Text_First=expected 'graph' or 'node' or 'edge'
+TreeBuild_Graph_Text=\u0627\u0644\u0645\u062A\u0648\u0642\u0639 '{'
+TreeVisualizer_Size1_JRadioButtonMenuItem_SetActionCommand_Size1_Text_First=\u062D\u062C\u0645 1
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_TwentyFirst=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u0623\u064A \u0634\u062C\u0631\u0629 \u0642\u0631\u0627\u0631\u0627\u062A \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u064A\u0647\u0627.
+TreeBuild_GetShape_Rectangle_Text=\u0645\u0633\u062A\u0637\u064A\u0644
+TreeVisualizer_Size6_JRadioButtonMenuItem_SetActionCommand_Size6_Text_First=\u062D\u062C\u0645 6
+TreeVisualizer_ClassifyChild_JMenuItem_SetActionCommand_Text_First=\u062A\u0635\u0646\u064A\u0641 \u0627\u0644\u062A\u0627\u0628\u0639
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Seventh=\u062E\u0637\u0623 \u060C \u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0642\u0627\u0621 \u0645\u062D\u062F\u062F\u0629 \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u0649 .
+TreeBuild_AttrList_Text_Tenth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644
+TreeVisualizer_FitToScreen_JMenuItem_Text_Second=\u0627\u0644\u0645\u0644\u0627\u0626\u0645\u0629 \u0645\u0639 \u0627\u0644\u0634\u0627\u0634\u0629
+TreeBuild_AttrList_StSval_Style_Text=\u0623\u0633\u0644\u0648\u0628
+TreeVisualizer_Size16_JRadioButtonMenuItem_SetActionCommand_Size16_Text_Second=\u062D\u062C\u0645 16
+TreeBuild_EdgeStmt_EdgesAddElement_Text_First=an edge ,no id
+TreeVisualizer_Size10_JRadioButtonMenuItem_SetActionCommand_Size10_Text_Second=\u062D\u062C\u0645 10
+TreeVisualizer_Visualise_JMenuItem_SetActionCommand_Text_First=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+TreeBuild_AttrStmt_Text_First_Alpha=\u062A\u0648\u0642\u0639\u062A '['
+TreeVisualizer_SendInstances_JMenuItem_SetActionCommand_Text=\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+TreeVisualizer_Size20_JRadioButtonMenuItem_SetActionCommand_Size20_Text_First=\u062D\u062C\u0645 20
+TreeVisualizer_Size12_JRadioButtonMenuItem_Size12_Text_First=\u062D\u062C\u0645 12
+TreeBuild_AttrList_Text_Fourth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0648\u0646 \u0627\u0644\u062E\u0637
+TreeBuild_NodeId_NextToken_Text_Second=\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0648\u062C\u0648\u062F \u0627\u0644\u062D\u0627\u0641\u0629
+TreeVisualizer_SelectFont_JMenu_Text_First=\u062D\u062F\u062F \u0627\u0644\u062E\u0637
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Eleventh=\u062E\u0637\u0623 \u060C \u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0642\u0627\u0621 \u0645\u062D\u062F\u062F\u0629 \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u0649 .
+TreeVisualizer_Size22_JRadioButtonMenuItem_SetActionCommand_Size22_Text_Second=\u062D\u062C\u0645 22
+TreeBuild_AttrList_Text_Sixth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+TreeVisualizer_RemChildren_JMenuItem_SetActionCommand_Text_First=\u0627\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeVisualizer_ChangeFontSize_Text=\u0627\u0633\u0645
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size4_Text=\u062D\u062C\u0645 4
+TreeBuild_AttrList_StSval_FontColor_Text=\u0644\u0648\u0646 \u0627\u0644\u062E\u0637
+TreeBuild_AttrList_NextToken_Text_Second=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u0646
+TreeBuild_AttrList_Text_Eleventh=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0646\u0645\u0637
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Fourth=\u062E\u0637\u0623\!
+TreeBuild_AttrStmt_NextToken_Text_Second_Alpha=\u062A\u0648\u0642\u0639\u062A '['
+TreeVisualizer_Size18_JRadioButtonMenuItem_SetActionCommand_Size18_Text_First=\u062D\u062C\u0645 18
+TreeVisualizer_ActionPerformed_CenterOnTopNode_Text=\u0645\u0631\u0643\u0632 \u0639\u0644\u0649 \u0623\u0639\u0644\u0649 \u0639\u0642\u062F\u0629
+TreeBuild_AttrStmt_Text_First=\u062A\u0648\u0642\u0639\u062A '['
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size12_Text=\u062D\u062C\u0645 12
+TreeVisualizer_ActionPerformed_Classify_Child_Text=\u062A\u0635\u0646\u064A\u0641 \u0627\u0644\u062A\u0627\u0628\u0639
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size8_Text=\u062D\u062C\u0645 8
+TreeBuild_AttrList_StSval_Color_Text=\u0627\u0644\u0644\u0648\u0646
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size22_Text=\u062D\u062C\u0645 22
+TreeVisualizer_ClassifyChild_JMenuItem_Text_Second=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0645\u0635\u0646\u0641 ...
+TreeBuild_StmtList_NextToken_Text=expects a STMT_LIST item or '}'
+TreeBuild_AttrStmt_NextToken_Text_Second=\u062A\u0648\u0642\u0639\u062A '['
+TreeVisualizer_Size14_JRadioButtonMenuItem_Size14_Text_First=\u062D\u062C\u0645 14
+TreeVisualizer_AutoScale_JMenuItem_SetActionCommand_Text_Second=\u0645\u0642\u064A\u0627\u0633 \u062A\u0644\u0642\u0627\u0626\u064A
+TreeBuild_AttrList_NextToken_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u0646
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size16_Text=\u062D\u062C\u0645 16
+TreeBuild_GetShape_Box_Text=\u0635\u0646\u062F\u0648\u0642
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_First=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0644\u0627\u062A \u0645\u0646 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0645\u062A\u0648\u0641\u0631\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0639\u0642\u062F\u0629.
+TreeVisualizer_Size2_JRadioButtonMenuItem_SetActionCommand_Size2_Text_Second=\u062D\u062C\u0645 2
+TreeVisualizer_ClassifyChild_JMenuItem_SetActionCommand_Text_Second=\u062A\u0635\u0646\u064A\u0641 \u0627\u0644\u062A\u0627\u0628\u0639
+TreeVisualizer_ItemStateChanged_MouseReleased_Font_Text=\u0627\u0633\u0645
+TreeVisualizer_Size20_JRadioButtonMenuItem_Size20_Text_Second=\u062D\u062C\u0645 20
+TreeVisualizer_Size12_JRadioButtonMenuItem_Size12_Text_Second=\u062D\u062C\u0645 12
+TreeVisualizer_TopN_JMenuItem_SetActionCommand_Text_First=\u0645\u0631\u0643\u0632 \u0639\u0644\u0649 \u0623\u0639\u0644\u0649 \u0639\u0642\u062F\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_TwentySecond=\u0639\u0630\u0631\u0627 \!
+TreeVisualizer_Size2_JRadioButtonMenuItem_SetActionCommand_Size2_Text_First=\u062D\u062C\u0645 2
+TreeBuild_GetShape_Oval_Text=\u0628\u064A\u0636\u0648\u064A
+TreeBuild_AttrList_StSval_Label_Text=\u0639\u0646\u0648\u0627\u0646
+TreeBuild_StmtList_StSval_Edge_Text=\u062D\u0627\u0641\u0629
+TreeBuild_GenerateStructures_Error_Text=\u062E\u0637\u0623 \u0645\u0646\u0637\u0642\u064A
+TreeVisualizer_AutoScale_JMenuItem_Text_Second=\u0645\u0642\u064A\u0627\u0633 \u062A\u0644\u0642\u0627\u0626\u064A
+TreeVisualizer_Size24_JRadioButtonMenuItem_SetActionCommand_Size24_Text_First=\u062D\u062C\u0645 24
+TreeBuild_Graph_StSval_Text=\u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A \u0627\u0644\u0645\u0648\u062C\u0647
+TreeVisualizer_ItemStateChanged_GetActionCommand_ActionPerformed_Text_Second=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Seventeenth=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u0623\u064A \u0634\u062C\u0631\u0629 \u0642\u0631\u0627\u0631\u0627\u062A \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u064A\u0647\u0627.
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Twentyth=\u062E\u0637\u0623\!
+TreeVisualizer_FitToScreen_JMenuItem_Text_First=\u0627\u0644\u0645\u0644\u0627\u0626\u0645\u0629 \u0645\u0639 \u0627\u0644\u0634\u0627\u0634\u0629
+TreeVisualizer_FitToScreen_JMenuItem_SetActionCommand_Text_First=\u0627\u0644\u0645\u0644\u0627\u0626\u0645\u0629 \u0645\u0639 \u0627\u0644\u0634\u0627\u0634\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Fifth=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u0623\u064A \u0634\u062C\u0631\u0629 \u0642\u0631\u0627\u0631\u0627\u062A \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u064A\u0647\u0627.
+TreeVisualizer_SelectFont_JMenu_SetActionCommand_Text_Second=\u062D\u062F\u062F \u0627\u0644\u062E\u0637
+TreeVisualizer_ItemStateChanged_GetActionCommand_HideDescendants_Text=\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0623\u062D\u0641\u0627\u062F
+TreeVisualizer_Visualise_JMenuItem_Text_First=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+Node_GetInstances_Exception_Text=\u062E\u0637\u0623 \:
+TreeBuild_AttrList_NextToken_Text_Twelveth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+TreeVisualizer_ItemStateChanged_GetActionCommand_ActionPerformed_Text_First=\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0642\u062F\u0629 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeBuild_AttrList_NextToken_Text_Eighth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644
+TreeBuild_AttrList_Text_Fourteenth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+TreeVisualizer_Size12_JRadioButtonMenuItem_SetActionCommand_Size12_Text_First=\u062D\u062C\u0645 12
+TreeVisualizer_Size18_JRadioButtonMenuItem_Size18_Text_Second=\u062D\u062C\u0645 18
+TreeVisualizer_SelectFont_JMenu_SetActionCommand_Text_First=\u062D\u062F\u062F \u0627\u0644\u062E\u0637
+TreeVisualizer_FitToScreen_JMenuItem_SetActionCommand_Text_Second=\u0627\u0644\u0645\u0644\u0627\u0626\u0645\u0629 \u0645\u0639 \u0627\u0644\u0634\u0627\u0634\u0629
+TreeBuild_Graph_NextToken_Text_First=expected 'digraph'
+TreeVisualizer_ItemStateChanged_GetActionCommand_Size1_Text=\u062D\u062C\u0645 1
+TreeBuild_NodeId_NextToken_Text_First=\u062D\u062F\u062B \u062E\u0637\u0623 \u0641\u064A \u0645\u0639\u0631\u0641 \u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0621
+TreeBuild_Graph_NextToken_Text_Second=\u0645\u062A\u0648\u0642\u0639 \u0648\u062C\u0648\u062F \u0627\u0633\u0645 \u0644\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064A\u0627\u0646\u064A
+TreeVisualizer_Size16_JRadioButtonMenuItem_Size16_Text_First=\u062D\u062C\u0645 16
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Tenth=\u0639\u0630\u0631\u0627 \!
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Thirteenth=\u0639\u0630\u0631\u0627\u060C \u0644\u0627 \u064A\u0648\u062C\u062F \u0623\u064A \u0634\u062C\u0631\u0629 \u0642\u0631\u0627\u0631\u0627\u062A \u0644\u062A\u0646\u0641\u064A\u0630 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0639\u0644\u064A\u0647\u0627.
+TreeBuild_AttrList_Text_Second=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u0646
+TreeBuild_AttrList_NextToken_Text_Fourth_Alpha=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0648\u0646 \u0627\u0644\u062E\u0637
+TreeVisualizer_Visualise_JMenuItem_Text_Second=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+TreeVisualizer_Size14_JRadioButtonMenuItem_SetActionCommand_Size14_Text_Second=\u062D\u062C\u0645 14
+TreeVisualizer_AutoScale_JMenuItem_Text_First=\u0645\u0642\u064A\u0627\u0633 \u062A\u0644\u0642\u0627\u0626\u064A
+TreeVisualizer_Size1_JRadioButtonMenuItem_Size1_Text_Second=\u062D\u062C\u0645 1
+TreeBuild_AttrList_Text_Third=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0648\u0646 \u0627\u0644\u062E\u0637
+TreeVisualizer_ActionPerformed_VisualizeTheNode_Text=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Sixth=\u0639\u0630\u0631\u0627 \!
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Twelveth=\u062E\u0637\u0623\!
+TreeVisualizer_Size20_JRadioButtonMenuItem_SetActionCommand_Size20_Text_Second=\u062D\u062C\u0645 20
+TreeBuild_StmtList_StSval_Graph_Text=\u0631\u0633\u0645 \u0628\u064A\u0627\u0646\u064A
+TreeVisualizer_Visualise_JMenuItem_SetActionCommand_Text_Second=\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0639\u0642\u062F\u0629
+TreeVisualizer_Size8_JRadioButtonMenuItem_SetActionCommand_Size8_Text_Second=\u062D\u062C\u0645 8
+TreeVisualizer_ActionPerformed_JOptionPaneShowMessageDialog_Text_Second=\u0639\u0630\u0631\u0627 \!
+TreeVisualizer_Size8_JRadioButtonMenuItem_SetActionCommand_Size8_Text_First=\u062D\u062C\u0645 8
+TreeBuild_AttrList_Text_Twelveth=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0646\u0645\u0637
+TreeVisualizer_Size18_JRadioButtonMenuItem_Size18_Text_First=\u062D\u062C\u0645 18
+TreeVisualizer_RemChildren_JMenuItem_Text_First=\u0627\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0627\u0628\u0639\u0629
+TreeBuild_AttrStmt_StSval_Edge_Text=\u062D\u0627\u0641\u0629
+TreeBuild_EdgeStmt_NextToken_Text_First=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0647\u062F\u0641 \u0645\u0646 \u0627\u0644\u062D\u0627\u0641\u0629
+TreeBuild_NodeId_Text_First=\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0648\u062C\u0648\u062F \u0627\u0644\u062D\u0627\u0641\u0629
+TreeVisualizer_Size16_JRadioButtonMenuItem_SetActionCommand_Size16_Text_First=\u062D\u062C\u0645 16
+TreeBuild_NextToken_StTT_EOF_Text=\u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u0645\u0644\u0641 , 
+TreeVisualizer_ActionPerformed_Send_Instances_Text=\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+TreeVisualizer_Accept_JMenuItem_Text_First=\u0627\u0642\u0628\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeVisualizer_Accept_JMenuItem_Text_Second=\u0627\u0642\u0628\u0644 \u0627\u0644\u0634\u062C\u0631\u0629
+TreeBuild_AttrList_Text_Seventh=\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0633\u0645\u064A\u0629
+TreeBuild_AttrStmt_Text_Second=\u062A\u0648\u0642\u0639\u062A '['
+TreeBuild_StmtList_StSval_Node_Text=\u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0621
+TreeBuild_AttrStmt_NextToken_Text_Third=\u062A\u0648\u0642\u0639\u062A '['
+TreeVisualizer_Size4_JRadioButtonMenuItem_SetActionCommand_Size4_Text_Second=\u062D\u062C\u0645 4
+TreeBuild_Graph_Error_Text_First=expected 'digraph'
diff --git a/src/main/java/weka/gui/visualize/messages/messages_ar.properties b/src/main/java/weka/gui/visualize/messages/messages_ar.properties
new file mode 100644
index 0000000..1047670
--- /dev/null
+++ b/src/main/java/weka/gui/visualize/messages/messages_ar.properties
@@ -0,0 +1,234 @@
+#
+#Sat Dec 13 20:21:37 IST 2014
+VisualizePanel_PlotPanel_CancelShapes_Submit_SetText_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646
+JPEGWriter_Main_Text_First=\u0628\u0646\u0627\u0621 \u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629 ...
+VisualizeUtils_JOptionPaneShowMessageDialog_Text_First=\u0623\u062F\u0627\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\:  \nVisualizeUtils\: Could not read a visualization configuration file.\nAn example file is included in the Weka distribution.\nThis file should be named "
+BMPWriter_Main_Text_Fifth=\u062A\u0645\!
+PrintableComponent_GetToolTipText_Result_Text=Click left mouse button while holding <alt> and <shift> to display a save dialog.
+PNGWriter_Main_Text_Third=\u0627\u0644\u0625\u062E\u0631\u0627\u062C \u0644\u0640 
+Plot2D_Main_Pd1_SetPlotName_Text_First=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+PostscriptGraphics_ReplacePSFont_Text_First=\u062A\u062D\u0648\u0644 \u0627\u0644\u062E\u0637 \u0645\u0646 '
+PrintableComponent_InitFileChooser_CustomDimensionsCheckBox_JCheckBox_Text=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0623\u0628\u0639\u0627\u062F \u0645\u062E\u0635\u0635\u0629
+BMPWriter_GetDescription_Text=BMP-\u0635\u0648\u0631\u0629
+PlotData2D_SetShapeType_Exception_Text_Second=PlotData2D\: Shape type vector must have the same number of entries as number of data points\!
+MatrixPanel_SetupAttribLists_Text_First=\u0627\u0644\u0644\u0648\u0646\:
+ThresholdVisualizePanel_OpenVisibleInstances_Text_First=(\u0645\u0646\u0637\u0642\u0629 \u062A\u062D\u062A \u0645\u0646\u062D\u0646\u0649 ROC \= 
+MatrixPanel_Main_SetBt_JButton_Text=\u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+Plot2D_AddPlot_Exception_Text_Second=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u062B\u0646\u0627\u0626\u064A \u0627\u0644\u0627\u0628\u0639\u0627\u062F \:\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0644\u0627 \u064A\u062A\u0648\u0627\u0641\u0642 \u0645\u0639 \u0627\u0644\u0645\u062E\u0637\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+PNGWriter_Main_Text_Fourth='...
+VisualizePanel_PlotPanel_OpenBut_JButton_Text=\u0641\u062A\u062D
+VisualizePanel_SNames_1_Text=\u0645\u0633\u062A\u0637\u064A\u0644
+MatrixPanel_OkBt_JButton_Text=\u0645\u0648\u0627\u0641\u0642
+PlotData2D_SetShapeType_Exception_Text_First=PlotData2D\: Shape type array must have the same number of entries as number of data points\!
+JPEGWriter_Main_Text_Fifth=\u062A\u0645\!
+AttributePanel_SetInstances_PaintComponent_DrawString_Text_Third=B
+Plot2D_SetInstances_TempPlot_SetPlotName_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+MatrixPanel_ActionPerformed_PercentLb_JLabel_Text=Subsample as 
+Plot2D_MasterName_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+VisualizePanel_PlotPanel_PlotReset_Submit_SetActionCommand_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646
+MatrixPanel_Main_ActionPerformed_ExtensionFileFilter_Text_First=ARFF
+PostscriptWriter_Main_Text_Fourth='...
+MatrixPanel_SetupAttribLists_Type_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+VisualizePanel_PlotPanel_SwitchToBars_Log_LogMessage_Text=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+VisualizePanel_SetXIndex_Text=\u0645\u0624\u0634\u0631 x \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642
+MatrixPanel_SetPercent_Text_First=100 
+VisualizePanel_PlotPanel_ActionPerformed_Reset_ActionCommand_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646
+JPEGWriter_GenerateOutput_Exception_Text_Second=\! 
+MatrixPanel_ActionPerformed_DoneBt_JButton_Text=\u062A\u0645
+ThresholdVisualizePanel_Main_Text_Eleventh=-l <file>\n\tPreviously saved threshold curve ARFF file.
+Plot2D_Main_Error_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+MatrixPanel_ActionPerformed_P4_Text=Jitter\: 
+VisualizePanel_PlotPanel_MouseReleased_Submit_SetText_Text=\u062A\u0633\u062C\u064A\u0644
+VisualizePanel_SetUpComboBoxes_AttributeDATE_Text=(\u062A\u0627\u0631\u064A\u062E)
+AttributePanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0633\u0645\u0629
+MatrixPanel_ActionPerformed_P2_BorderFactoryCreateTitledBorder_Text=\u0641\u0626\u0629 \u0627\u0644\u0644\u0648\u0646
+VisualizePanel_Main_Pd1_SetPlotName_Text_Second=\u062A\u062E\u0637\u064A\u0637 
+ClassPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0627\u0644\u0641\u0626\u0629
+ThresholdVisualizePanel_Main_Text_Second=\:\n
+VisualizePanel_PlotPanel_Log_LogMessage_Text_Second=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+VisualizeUtils_JOptionPaneShowMessageDialog_Text_Second=" \u0648 \u064A\u062C\u0628 \u0648\u0636\u0639\u0647\u0627 \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0631\u0626\u064A\u0633\u064A (\u0627\u0644\u0630\u064A \u0647\u0648 "
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Eighth=\u062E\u0637\u0623 ...
+VisualizePanel_SetYIndex_Text=\u0627\u0644\u0645\u0624\u0634\u0631 y \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642
+MatrixPanel_StateChanged_PointSizeLb_Text_Second=]
+VisualizePanel_SetUpComboBoxes_XNames_Text=X\:
+PostscriptGraphics_Scale_Error_Text_First=d1 \= 
+Plot2D_SearchPoints_Text_Fourth=\: 
+MatrixPanel_SelAttrib_JButton_Text=\u062D\u062F\u062F \u0627\u0644\u0633\u0645\u0627\u062A
+VisualizePanel_ColourCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0633\u0645\u0629 \u0627\u0644\u0644\u0648\u0646 \u0639\u0644\u0649
+MatrixPanel_Main_Text=\u0627\u0644\u0627\u0633\u062A\u0639\u0645\u0627\u0644 \:\u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629  <arff \u0645\u0644\u0641>
+JComponentWriter_Error_Text_First=\: \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Seventh=\= \u0635\u062D\u064A\u062D \n
+ClassPanel_Main_Error_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \: weka.gui.visualize.ClassPanel <dataset> [class col]
+VisualizePanel_OpenVisibleInstances_JOptionPane.showMessageDialog_Text=\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 ...
+AttributePanel_Main_Error_Text_Fourth=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Third=\u0644\u0627 \u064A\u0632\u0627\u0644 \u0628\u0625\u0645\u0643\u0627\u0646\u0643 \u064A\u062F\u0648\u064A\u0627 \u062A\u0645\u0643\u064A\u0646 \u0623\u0648 \u062A\u0639\u0637\u064A\u0644 \u062A\u0644\u0645\u064A\u062D \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0639\u0646 \u0637\u0631\u064A\u0642 \u0627\u0644\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \n
+ThresholdVisualizePanel_OpenVisibleInstances_Text_Fourth=)
+ThresholdVisualizePanel_Main_Text_Seventh=-W <classname>\n\tFull classname of classifier to run.\n\tOptions after '--' are passed to the classifier.\n\t(default\: weka.classifiers.functions.Logistic)
+MatrixPanel_Plot_SetToolTipText_Text=\u0623\u064A \u0634\u064A\u0621 
+JPEGWriter_Main_Text_Fourth='...
+JPEGWriter_GetDescription_Text=JPEG- \u0635\u0648\u0631\u0629
+VisualizePanel_PlotPanel_Error_Text_Second=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+PostscriptGraphics_Scale_Error_Text_Second=, d2 \= 
+PlotData2D_PlotName_Text=\u062A\u062E\u0637\u064A\u0637 \u062C\u062F\u064A\u062F
+VisualizePanel_SNames_2_Text=\u0627\u0644\u0645\u0636\u0644\u0639
+VisualizePanel_SetUpComboBoxes_YNames_Text=Y\:
+Plot2D_SearchPoints_Text_First=\n\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \: 
+MatrixPanel_Main_ActionPerformed_ExtensionFileFilter_Text_Second=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ARFF
+MatrixPanel_ActionPerformed_RseedLb_JLabel_Text=\u0628\u0630\u0648\u0631 \u0639\u0634\u0648\u0627\u0626\u064A\u0629\:
+PNGWriter_Main_Text_Second=digraph atree { top [label\="the top"] a [label\="the first node"] b [label\="the second nodes"] c [label\="comes off of first"] top->a top->b b->c }
+MatrixPanel_Jd_JDialog_Text=\u0644\u0648\u062D\u0629 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0633\u0645\u0629
+PrintableComponent_InitFileChooser_JComponentWriterFileFilter_Text_Second=)
+ThresholdVisualizePanel_Main_Text_Eighth=-r <number>\n\tThe number of runs to perform (default\: 1).
+VisualizePanel_SetUpComboBoxes_AttributeRELATIONAL_Text=(Rel)
+MatrixPanel_ActionPerformed_Lb_JLabel_Text=\u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062A\u062E\u0637\u064A\u0637
+BMPWriter_Main_Text_Fourth='...
+Plot2D_SearchPoints_Text_Fifth=\u0645\u0641\u0642\u0648\u062F
+MatrixPanel_PlotSizeLb_JLabel_Text=\u062D\u062C\u0645 \u0627\u0644\u062E\u0637\: [100]
+ThresholdVisualizePanel_Main_Text_Thirteenth=)
+VisualizePanel_PlotPanel_Error_Text_First=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+VisualizePanel_PlotPanel_Submit_JButton_Text=\u062A\u0633\u062C\u064A\u0644
+VisualizePanel_PlotPanel_SwitchToBars_Error_Text=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+PostscriptWriter_Main_Text_Second=digraph atree { top [label\="the top"] a [label\="the first node"] b [label\="the second nodes"] c [label\="comes off of first"] top->a top->b b->c }
+VisualizePanel_PlotPanel_Cancel_JButton_Text=\u0645\u0633\u062D
+MatrixPanel_SetupAttribLists_Type_AttributeRELATIONAL_Text=(Rel)
+MatrixPanel_Plot_GetToolTipText_Text_First=X\: 
+LegendPanel_Main_Error_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \: weka.gui.visualize.LegendPanel <dataset> [dataset2], [dataset3],...
+JComponentWriter_SetScale_Error_Text_Second=\u0645\u0642\u064A\u0627\u0633 Y \= 
+PNGWriter_GetDescription_Text=PNG-\u0635\u0648\u0631\u0629
+ThresholdVisualizePanel_Main_Text_Twelveth=. (\u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 
+ThresholdVisualizePanel_Main_Text_First=\n\u062E\u064A\u0627\u0631 \u0644\u0640
+MatrixPanel_Plot_GetToolTipText_Text_Fourth=\u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629 
+AttributePanel_Main_Error_Text_Third=\u0645\u0624\u0634\u0631 y \u062A\u063A\u064A\u0631 \u0625\u0644\u0649\: 
+PostscriptWriter_Main_Text_First=\u0628\u0646\u0627\u0621 \u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629 ...
+VisualizePanel_OpenVisibleInstances_JFrame_Text_First=\u0639\u0631\u0636 \u0628\u064A\u0627\u0646\u0627\u062A \u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+JComponentWriter_ToOutput_Exception_Text_First=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u0644\u0641\!
+MatrixPanel_SetupAttribLists_Type_AttributeNUMERIC_Text=(Num)
+PNGWriter_Main_Text_First=\u0628\u0646\u0627\u0621 \u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629 ...
+VisualizeUtils_ProcessColour_Error_Text_Third=\u0623\u062F\u0627\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\: \u0627\u0644\u0644\u0648\u0646 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641(
+VisualizePanel_PlotPanel_ActionPerformed_Error_Text_First=\u062E\u0637\u0623 \:
+MatrixPanel_StateChanged_PlotSizeLb_Text_First=\u062D\u062C\u0645 \u0627\u0644\u062E\u0637\: [
+VisualizePanel_PlotPanel_MouseClicked_Submit_SetText_Text_Second=\u062A\u0633\u062C\u064A\u0644
+PostscriptGraphics_ReplacePSFont_Text_Second=' \u0625\u0644\u0649 '
+BMPWriter_Main_Text_Third=\u0627\u0644\u0625\u062E\u0631\u0627\u062C \u0644\u0640 
+VisualizePanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+VisualizePanel_Main_Error_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \: weka.gui.visualize.VisualizePanel <dataset> [<dataset> <dataset>...]
+MatrixPanel_Plot_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+ThresholdVisualizePanel_Main_Text_Fifth=-c <num>\n\tThe class index. first and last are valid, too (default\: last).
+PostscriptWriter_Main_Text_Fifth=\u062A\u0645\!
+Plot2D_SearchPoints_Text_Second=\n\u0627\u0644\u062D\u0627\u0644\u0629\:  
+VisualizePanel_Main_Logger_Text=\u0628\u062F\u0623 \u0627\u0644\u062A\u0633\u062C\u064A\u0644 
+Plot2D_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+VisualizePanel_XCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0627\u0644\u0633\u0645\u0629 \u0644\u0645\u062D\u0648\u0631 \u0633
+AttributePanel_SetInstances_PaintComponent_DrawString_Text_First=X
+PNGWriter_Main_Text_Fifth=\u062A\u0645\!
+MatrixPanel_SetupAttribLists_Type_AttributeDEFAULT_Text=(???) 
+PlotData2D_AddInstanceNumberAttribute_AddF_SetAttributeIndex_Text=\u0627\u0644\u0623\u0648\u0644
+Plot2D_SearchPoints_Text_Sixth=\n
+JPEGWriter_Main_Text_Third=\u0627\u0644\u0625\u062E\u0631\u0627\u062C \u0644\u0640 
+VisualizeUtils_JOptionPaneShowMessageDialog_Text_Third=\ ") \n" \u0623\u0648 \u0627\u0644\u062F\u0644\u064A\u0644 \u0627\u0644\u0630\u064A \u062C\u0627\u0641\u0627 \u0628\u062F\u0623 \u0645\u0646\u0647 \n
+MatrixPanel_ActionPerformed_PointSizeLb_Text=\u062D\u062C\u0645 \u0627\u0644\u0646\u0642\u0637\u0629\: [1]
+VisualizePanel_SetUpComboBoxes_CNames_Text=\u0627\u0644\u0644\u0648\u0646\:
+PostscriptGraphics_ReplacePSFont_Text_Third='
+AttributePanel_Main_Error_Text_Second=\u0645\u0624\u0634\u0631 x \u062A\u063A\u064A\u0631 \u0625\u0644\u0649 \: 
+PrintableComponent_Error_Text_First=\: \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649
+VisualizePanel_SNames_3_Text=\u0634\u0643\u0644 \u0645\u062A\u0639\u062F\u062F \u0627\u0644\u062E\u0637\u0648\u0637
+ThresholdVisualizePanel_OpenVisibleInstances_Text_Third=(\u0645\u0646\u0637\u0642\u0629 \u062A\u062D\u062A \u0645\u0646\u062D\u0646\u0649 ROC \= 
+ThresholdVisualizePanel_OpenVisibleInstances_Text_Second=)
+VisualizeUtils_ProcessColour_Error_Text_Fourth=).
+ThresholdVisualizePanel_SetBorderText_Text_First=x\:\u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0627\u064A\u062C\u0627\u0628\u064A \u0627\u0644\u062E\u0627\u0637\u0649\u0621
+JPEGWriter_Main_Text_Second=digraph atree { top [label\="the top"] a [label\="the first node"] b [label\="the second nodes"] c [label\="comes off of first"] top->a top->b b->c }
+VisualizePanel_SetUpComboBoxes_Error_Text=\u0645\u0634\u0643\u0644\u0629  \u0641\u064A \u0625\u0639\u062F\u0627\u062F \u0623\u0628\u0639\u0627\u062F \u0627\u0644\u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0645\u0641\u0636\u0644\u0629
+PrintableComponent_SetScale_Error_Text_Second=, y \=  
+VisualizePanel_ClassSurround_BorderFactoryCreateTitledBorder_Text=\u0641\u0626\u0629 \u0627\u0644\u0644\u0648\u0646
+PlotData2D_SetShapeType_Exception_Text_Third=PlotData2D\: Shape size array must have the same number of entries as number of data points\!
+MatrixPanel_ResampleBt_JButton_Text=\u0639\u064A\u0646\u0629 \u0641\u0631\u0639\u064A\u0629 % \:
+MatrixPanel_SetupAttribLists_Type_AttributeNOMINAL_Text=(Nom)
+MatrixPanel_ActionPerformed_Percent2Lb_JLabel_Text=% \u0645\u0646 \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A
+VisualizePanel_PlotPanel_CancelShapes_Submit_SetActionCommand_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646
+PostscriptGraphics_Error_Text=\: \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649
+ThresholdVisualizePanel_Main_Text_Tenth=-S <number>\n\tThe seed value for randomizing the data (default\: 1).
+VisualizePanel_PlotPanel_ActionPerformed_Submit_ActionCommand_Text=\u062A\u0633\u062C\u064A\u0644
+ThresholdVisualizePanel_Main_JFrame_Text=\u0639\u0631\u0636 \u0628\u064A\u0627\u0646\u0627\u062A \u0645\u0635\u0646\u0641 \u0648\u064A\u0643\u0627\:
+ClassPanel_Main_Error_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+VisualizePanel_SetUpComboBoxes_AttributeSTRING_Text=(Str)
+VisualizePanel_PlotPanel_PlotReset_Submit_SetText_Text=\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646
+VisualizePanel_PlotSurround_BorderFactoryCreateTitledBorder_Text=\u062A\u062E\u0637\u064A\u0637 
+VisualizePanel_PlotPanel_ActionPerformed_Error_Text_Second=\u062E\u0637\u0623 \:
+JComponentWriter_ToOutput_Exception_Text_Second=\u0644\u0645 \u064A\u062A\u0645 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u0643\u0648\u0646\!
+PostscriptWriter_GetDescription_Text=Postscript-File
+BMPWriter_Main_Text_Second=digraph atree { top [label\="the top"] a [label\="the first node"] b [label\="the second nodes"] c [label\="comes off of first"] top->a top->b b->c }
+MatrixPanel_StateChanged_PointSizeLb_Text_First=\u062D\u062C\u0645 \u0627\u0644\u0646\u0642\u0637\u0629\: [
+ThresholdVisualizePanel_Main_Text_Sixth=-C <\u0631\u0642\u0645>\n\u0627\u0644\u0645\u0624\u0634\u0631 \u0639\u0644\u0649 \u0642\u064A\u0645\u0629 \u0627\u0644\u0641\u0626\u0629 \u0644\u0625\u062D\u0636\u0627\u0631 \u0627\u0644\u0645\u0646\u062D\u0646\u0649  (\u0627\u0644\u0625\u0641\u062A\u0631\u0627\u0636\u064A \: \u0627\u0644\u0623\u0648\u0644).
+PrintableComponent_SaveDialogTitle_Text=\u062D\u0641\u0638 \u0643 ...
+MatrixPanel_ActionPerformed_Jd_JDialog_Text=\u0627\u0644\u0644\u0648\u062D\u0629 % \u0639\u064A\u0646\u0629 \u0641\u0631\u0639\u064A\u0629
+JPEGWriter_GenerateOutput_Exception_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u0643\u0627\u062A\u0628 \u0645\u062A\u0648\u0641\u0631 \u0644\u0640
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Fourth=\u0641\u064A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u062A\u0627\u0644\u064A \n
+LegendPanel_Main_JFrame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0648\u0633\u064A\u0644\u0629 \u0627\u0644\u0627\u064A\u0636\u0627\u062D
+MatrixPanel_Main_JFRame_Text=\u0645\u062A\u0635\u0641\u062D \u0648\u064A\u0643\u0627 \: \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629
+LegendPanel_Main_JColorChooserShowDialog_Text=\u062D\u062F\u062F \u0644\u0648\u0646 \u062C\u062F\u064A\u062F
+PlotData2D_AddInstanceNumberAttribute_AddF_SetAttributeName_Text=\u0631\u0642\u0645 \u0627\u0644\u062D\u0627\u0644\u0629
+VisualizePanel_PlotPanel_JitterLab_JLabel_Text=Jitter
+PlotData2D_SetShapeType_Exception_Text_Fourth=PlotData2D\: Shape size vector must have the same number of entries as number of data points\!
+VisualizePanel_OpenBut_SetToolTipText_Text=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u062E\u0632\u0646\u0629 \u0645\u0633\u0628\u0642\u0627 \u0645\u0646 \u0645\u0644\u0641 
+ThresholdVisualizePanel_Main_Text_Nineth=-x <\u0631\u0642\u0645>\n\u0639\u062F\u062F \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0645\u0642\u0637\u0639\u064A ( \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A10 (
+VisualizePanel_PlotPanel_MouseReleased_Submit_SetActionCommand_Text=\u062A\u0633\u062C\u064A\u0644
+VisualizePanel_SetSIndex_Text=\u0645\u0624\u0634\u0631 s \u062E\u0627\u0631\u062C \u0627\u0644\u0646\u0637\u0627\u0642\!
+Plot2D_AddPlot_Exception_Text_First=\u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0644\u0627\u062A \u0641\u064A \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062E\u0637\u064A\u0637 \!
+PrintableComponent_InitFileChooser_Label_Jlabel_Text_Second=\u0627\u0631\u062A\u0641\u0627\u0639
+VisualizePanel_PlotPanel_MouseClicked_Submit_SetActionCommand_Text_First=\u062A\u0633\u062C\u064A\u0644
+MatrixPanel_Plot_GetToolTipText_Text_Second=Y\: 
+MatrixPanel_PointSizeLb_JLabel_Text=\u062D\u062C\u0645 \u0627\u0644\u0646\u0642\u0637\u0629\: [10]
+VisualizePanel_PlotPanel_Log_LogMessage_Text_First=\u062A\u062D\u0630\u064A\u0631\:   \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0633\u0645\u0627\u062A \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636\u0647 \u0643\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u0633\u0645\u0629.
+VisualizePanel_PlotPanel_ArffFilter_FileFilter_Text=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ARFF
+LegendPanel_Main_Error_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+VisualizePanel_SNames_0_Text=\u062D\u062F\u062F \u0627\u0644\u062D\u0627\u0644\u0629
+PlotData2D_SetConnectPoints_Exception_Text_Second=PlotData2D\: connect points array must have the same number of entries as number of data points\!
+VisualizeUtils_ProcessColour_Error_Text_Second=).
+JComponentWriter_SetScale_Error_Text_First=\u0645\u0642\u064A\u0627\u0633 x \= 
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_First=Some panels enable the user to save the content as JPEG or EPS.\nIn order to see which panels support this, a tooltip can be displayed. Enable tooltip?
+Plot2D_Main_Pd1_SetPlotName_Text_Second=\u062A\u062E\u0637\u064A\u0637 
+AttributePanel_SetInstances_Exception_Text=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636 \u0623\u0643\u062B\u0631 \u0645\u0646 512 \u0633\u0645\u0627\u062A \!
+MatrixPanel_SetupAttribLists_Type_AttributeSTRING_Text=(Str)
+VisualizePanel_SetUpComboBoxes_AttributeDEFAULT_Text=(???) 
+PostscriptGraphics_Translate_Text_Second=\u0648 y \= 
+VisualizePanel_SetUpComboBoxes_AttributeNUMERIC_Text=(Num)
+PrintableComponent_InitFileChooser_AspectRatioCheckBox_JCheckBox_Text=\u0627\u0644\u062D\u0641\u0627\u0638 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0627\u0644\u0639\u0631\u0636 \u0625\u0644\u0649 \u0627\u0644\u0627\u0631\u062A\u0641\u0627\u0639
+VisualizePanel_PlotPanel_MouseClicked_Submit_SetActionCommand_Text_Second=\u062A\u0633\u062C\u064A\u0644
+Plot2D_SearchPoints_Text_Third=\n
+MatrixPanel_StateChanged_PlotSizeLb_Text_Second=]
+ThresholdVisualizePanel_SetBorderText_Text_Second=y\:\u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0627\u064A\u062C\u0627\u0628\u064A \u0627\u0644\u0635\u062D\u064A\u062D
+ThresholdVisualizePanel_Main_Text_Fourth=-t <file>\n\tDataset to process with given classifier.
+VisualizePanel_YCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0627\u0644\u0633\u0645\u0629 \u0644\u0644\u0645\u062D\u0648\u0631 \u0635
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Fifth=\u062E\u0637\u0623 \u0641\u064A \u062D\u0641\u0638 \u0627\u0644\u0645\u0644\u0641 \! \n
+Plot2D_SetMasterPlot_Exception_Text=\u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0644\u0627\u062A \u0641\u064A \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u062A\u062E\u0637\u064A\u0637 \!
+PrintableComponent_InitFileChooser_JComponentWriterFileFilter_Text_First=(*
+VisualizePanel_PlotPanel_MouseClicked_Submit_SetText_Text_First=\u062A\u0633\u062C\u064A\u0644
+MatrixPanel_Plot_Pd_SetPlotName_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+ThresholdVisualizePanel_Main_Text_Fourteenth=(\u0644\u0644\u0639\u0631\u0636 \u0641\u0642\u0637)
+VisualizePanel_ShapeCombo_SetToolTipText_Text=\u062D\u062F\u062F \u0627\u0644\u0634\u0643\u0644 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647 \u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A
+VisualizeUtils_JOptionPaneShowMessageDialog_Text_Fourth=\u062A\u062E\u0637\u064A\u0637 \u062B\u0646\u0627\u0626\u064A \u0627\u0644\u0627\u0628\u0639\u0627\u062F
+MatrixPanel_CancelBt_JButton_Text=\u0625\u0644\u063A\u0627\u0621
+MatrixPanel_Main_ActionPerformed_Text_First=\u0644\u0642\u062F \u0627\u062E\u062A\u0631\u062A \u0627\u0646 \u062A\u0641\u062A\u062D \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641\:
+PlotData2D_SetConnectPoints_Exception_Text_First=PlotData2D\: connect points array must have the same number of entries as number of data points\!
+Plot2D_Main_Error_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \: weka.gui.visualize.Plot2D <dataset> [<dataset> <dataset>...]
+VisualizePanel_OpenVisibleInstances_JFrame_Text_Second=(\u0644\u0644\u0639\u0631\u0636 \u0641\u0642\u0637)
+VisualizePanel_PlotPanel_SaveBut_JButton_Text=\u062D\u0641\u0638
+AttributePanel_Main_Error_Text_First=\u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \: weka.gui.visualize.AttributePanel <dataset> [class col]
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Second=\u062A\u0644\u0645\u064A\u062D \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0644\u0644\u0648\u062D\u0627\u062A ...
+VisualizeUtils_ProcessColour_Error_Text_First=\u0623\u062F\u0627\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A\: \u0645\u0634\u0643\u0644\u0629 \u0641\u064A \u062A\u062D\u0644\u064A\u0644 \u0642\u064A\u0645\u0629 \u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u0644\u0648\u0646 (
+VisualizePanel_SaveBut_SetToolTipText_Text=\u062D\u0641\u0638 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0627\u0644\u0638\u0627\u0647\u0631\u0629 \u0625\u0644\u0649 \u0645\u0644\u0641
+PrintableComponent_SetScale_Error_Text_First=x \=  
+BMPWriter_Main_Text_First=\u0628\u0646\u0627\u0621 \u0645\u0645\u062B\u0644 \u0627\u0644\u0634\u062C\u0631\u0629 ...
+PrintableComponent_GetToolTipText_JOptionPaneShowConfirmDialog_Text_Sixth=\u0645\u0644\u0627\u062D\u0638\u0629\:\n\n\u0625\u0630\u0627 \u0643\u0646\u062A \u062A\u0631\u063A\u0628 \u0628\u0625\u0644\u063A\u0627\u0621 \u0638\u0647\u0648\u0631 \u0647\u0630\u0647 \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u0642\u0645  \u0628\u0625\u0636\u0627\u0641\u0629 \u0645\u0644\u0641 \u0627\u0633\u0645\u0647 'Visualize.props' \u0625\u0645\u0627 \u0641\u064A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\ [...]
+MatrixPanel_Plot_GetToolTipText_Text_Third=(\u0627\u0646\u0642\u0631 \u0644\u0644\u062A\u0643\u0628\u064A\u0631)
+VisualizePanel_Main_Error_Text_Second=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0627\u0644\u0627\u062A \u0645\u0646 
+PrintableComponent_InitFileChooser_Label_Jlabel_Text_First=\u0639\u0631\u0636
+MatrixPanel_UpdateBt_JButton_Text=\u062A\u062D\u062F\u064A\u062B
+VisualizePanel_SetUpComboBoxes_PlotSurround_BorderFactoryCreateTitledBorder_Text=\u0627\u0644\u062A\u062E\u0637\u064A\u0637\:
+PostscriptGraphics_Translate_Text_First=\u0627\u0644\u062A\u0631\u062C\u0645\u0629 \u0645\u0639 x\= 
+AttributePanel_SetInstances_PaintComponent_DrawString_Text_Second=Y
+VisualizePanel_Main_Pd1_SetPlotName_Text_First=\u0627\u0644\u062A\u062E\u0637\u064A\u0637 \u0627\u0644\u0631\u0626\u064A\u0633\u064A
+Plot2D_SearchPoints_JFrame_Text=\u0648\u064A\u0643\u0627\: \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062D\u0627\u0644\u0627\u062A
+VisualizePanel_SetUpComboBoxes_AttributeNOMINAL_Text=(Nom)
+ThresholdVisualizePanel_Main_Text_Third=- h \n\u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629
+PostscriptWriter_Main_Text_Third=\u0627\u0644\u0625\u062E\u0631\u0627\u062C \u0644\u0640 
diff --git a/src/test/java/weka/core/tokenizers/NGramTokenizerTest.java b/src/test/java/weka/core/tokenizers/NGramTokenizerTest.java
index 8ec6442..fc37927 100644
--- a/src/test/java/weka/core/tokenizers/NGramTokenizerTest.java
+++ b/src/test/java/weka/core/tokenizers/NGramTokenizerTest.java
@@ -24,9 +24,10 @@ import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
- * Tests NGramTokenizer. Run from the command line with:<p>
+ * Tests NGramTokenizer. Run from the command line with:
+ * <p>
  * java weka.core.tokenizers.NGramTokenizerTest
- *
+ * 
  * @author FracPete (fracpete at waikato dot ac dot nz)
  * @version $Revision: 1.1 $
  */
@@ -38,6 +39,7 @@ public class NGramTokenizerTest
   }
 
   /** Creates a default NGramTokenizer */
+  @Override
   public Tokenizer getTokenizer() {
     return new NGramTokenizer();
   }
@@ -46,35 +48,49 @@ public class NGramTokenizerTest
    * tests the number of generated tokens
    */
   public void testNumberOfGeneratedTokens() {
-    String 	s;
-    String[]	result;
-    
+    String s;
+    String[] result;
+
     s = "HOWEVER, the egg only got larger and larger, and more and more human";
 
     // only 1-grams
     try {
-      result = Tokenizer.tokenize(m_Tokenizer, new String[]{"-min", "1", "-max", "1", s});
+      result =
+        Tokenizer.tokenize(m_Tokenizer, new String[] { "-min", "1", "-max",
+          "1", s });
       assertEquals("number of tokens differ (1)", 13, result.length);
-    }
-    catch (Exception e) {
+    } catch (Exception e) {
       fail("Error tokenizing string '" + s + "'!");
     }
 
     // only 2-grams
     try {
-      result = Tokenizer.tokenize(m_Tokenizer, new String[]{"-min", "2", "-max", "2", s});
+      result =
+        Tokenizer.tokenize(m_Tokenizer, new String[] { "-min", "2", "-max",
+          "2", s });
       assertEquals("number of tokens differ (2)", 12, result.length);
-    }
-    catch (Exception e) {
+    } catch (Exception e) {
       fail("Error tokenizing string '" + s + "'!");
     }
 
     // 1 to 3-grams
     try {
-      result = Tokenizer.tokenize(m_Tokenizer, new String[]{"-min", "1", "-max", "3", s});
+      result =
+        Tokenizer.tokenize(m_Tokenizer, new String[] { "-min", "1", "-max",
+          "3", s });
       assertEquals("number of tokens differ (3)", 36, result.length);
+    } catch (Exception e) {
+      fail("Error tokenizing string '" + s + "'!");
     }
-    catch (Exception e) {
+
+    // 1 to 3-grams, but sentence only has 2 grams
+    try {
+      s = "cannot split";
+      result =
+        Tokenizer.tokenize(m_Tokenizer, new String[] { "-min", "1", "-max",
+          "3", s });
+      assertEquals("number of tokens differ (4)", 3, result.length);
+    } catch (Exception e) {
       fail("Error tokenizing string '" + s + "'!");
     }
   }
@@ -83,7 +99,7 @@ public class NGramTokenizerTest
     return new TestSuite(NGramTokenizerTest.class);
   }
 
-  public static void main(String[] args){
+  public static void main(String[] args) {
     junit.textui.TestRunner.run(suite());
   }
 }
diff --git a/src/test/resources/wekarefs/weka/classifiers/trees/RandomForestTest.ref b/src/test/resources/wekarefs/weka/classifiers/trees/RandomForestTest.ref
index 1406116..0a9ec64 100644
--- a/src/test/resources/wekarefs/weka/classifiers/trees/RandomForestTest.ref
+++ b/src/test/resources/wekarefs/weka/classifiers/trees/RandomForestTest.ref
@@ -4,9 +4,9 @@ NOM: 1.0 1.0 1.0 0.0 1.0
 NOM: 1.0 1.0 1.0 0.0 1.0
 NOM: 0.0 0.0 1.0 1.0 0.0
 NOM: 1.0 1.0 1.0 0.0 1.0
-NOM: 0.0 0.0 1.0 1.0 0.0
+NOM: 0.0 0.0 1.0 0.9 0.1
 NOM: 1.0 1.0 1.0 0.0 1.0
 NOM: 0.0 0.0 1.0 1.0 0.0
-NOM: 0.0 0.0 1.0 1.0 0.0
+NOM: 0.0 0.0 1.0 0.9 0.1
 NOM: 1.0 1.0 1.0 0.0 1.0
 
diff --git a/wekadocs/README b/wekadocs/README
index 74956df..6f7868f 100644
--- a/wekadocs/README
+++ b/wekadocs/README
@@ -4,8 +4,8 @@
                               README                                   
                               ======                                   
                                                                        
-                            WEKA 3.6.11
-                            24 April 2014
+                            WEKA 3.6.12
+                            17 Dec 2014
                                                                        
                  Java Programs for Machine Learning 
 
diff --git a/wekadocs/manual/bayesnet.tex b/wekadocs/manual/bayesnet.tex
index 941aadd..488d07f 100644
--- a/wekadocs/manual/bayesnet.tex
+++ b/wekadocs/manual/bayesnet.tex
@@ -14,7 +14,7 @@
 %    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 %
 
-% Version: $Revision: 5898 $
+% Version: $Revision: 11314 $
 
 \section{Introduction}
 
@@ -142,7 +142,7 @@ to determine the score.
 \item {\em fixed structure}:
 Finally, there are a few methods so that a structure can be fixed, for
 example, by reading it from an XML BIF file\footnote{See {\sf
-\url{http://www-2.cs.cmu.edu/\~fgcozman/Research/InterchangeFormat/}{}}
+\url{http://www.cs.cmu.edu/~fgcozman/Research/InterchangeFormat/}{}}
 for details on XML BIF.}.
 \end{itemize}
 
diff --git a/wekadocs/manual/manual.tex b/wekadocs/manual/manual.tex
index 47ea4ef..f3aea81 100644
--- a/wekadocs/manual/manual.tex
+++ b/wekadocs/manual/manual.tex
@@ -14,7 +14,7 @@
 %    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 %
 
-% Version: $Revision: 10665 $
+% Version: $Revision: 11392 $
 
 \documentclass[a4paper]{book}
 
@@ -26,7 +26,7 @@
 \input{hyphenation}
 \input{extensions}
 
-\title{\epsfig{file=images/coat_of_arms.eps,width=10cm}\vspace{3cm}\\WEKA Manual\\for Version 3-6-11}
+\title{\epsfig{file=images/coat_of_arms.eps,width=10cm}\vspace{3cm}\\WEKA Manual\\for Version 3-6-12}
 \author{Remco R. Bouckaert\\Eibe Frank\\Mark Hall\\Richard Kirkby\\Peter Reutemann\\Alex Seewald\\David Scuse}
 
 \setcounter{secnumdepth}{3}
diff --git a/wekadocs/manual/using_api.tex b/wekadocs/manual/using_api.tex
index d238b2e..80e30fb 100644
--- a/wekadocs/manual/using_api.tex
+++ b/wekadocs/manual/using_api.tex
@@ -14,7 +14,7 @@
 %    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 %
 
-% Version: $Revision: 5898 $
+% Version: $Revision: 11089 $
 
 Using the graphical tools, like the Explorer, or just the command-line is in
 most cases sufficient for the normal user. But WEKA's clearly defined API
@@ -487,6 +487,66 @@ array and added to the dataset:
 \end{verbatim}
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Generating artificial datasets %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Generating artificial data}
+\label{api_artificial_datasets}
+Using WEKA's data generators it is very easy to generate artificial datasets. 
+There are two possible approaches to generating data, which get discussed in 
+turn in the following sections.
+
+\subsection{Generate ARFF file}
+Simply generating an ARFF file is achieved using the static \texttt{DataGenerator.makeData}
+method. In order to write to a file, the generator needs to have a \texttt{java.io.PrintWriter}
+object for writing to, in this case a \texttt{FileWriter}.
+
+The code below writes data generated by \textit{RDG1} to the file \textit{rdg1.arff}:
+\begin{verbatim}
+import weka.datagenerators.DataGenerator;
+import weka.datagenerators.classifiers.classification.RDG1;
+...
+// configure generator
+RDG1 generator = new RDG1();
+generator.setMaxRuleSize(5);
+// set where to write output to
+java.io.PrintWriter output = new java.io.PrintWriter(
+  new java.io.BufferedWriter(new java.io.FileWriter("rdg1.arff")));
+generator.setOutput(output);
+DataGenerator.makeData(generator, generator.getOptions());
+output.flush();
+output.close();
+\end{verbatim}
+
+
+\subsection{Generate Instances}
+Rather than writing the artificial data directly to a file, it is possible to obtain the 
+data in the form of \texttt{Instance}/\texttt{Instances} directly. Depending on the 
+generator, the data can be retrieved instance by instance (determined by 
+\texttt{getSingleModeFlag()}), or as full dataset.
+
+The example below generates data using the \texttt{Agrawal} generator:
+\begin{verbatim}
+import weka.datagenerators.classifiers.classification.Agrawal;
+...
+// configure data generator
+Agrawal generator = new Agrawal();
+generator.setBalanceClass(true);
+// initialize dataset and get header
+generator.setDatasetFormat(generator.defineDataFormat());
+Instances header = generator.getDatasetFormat();
+// generate data
+if (generator.getSingleModeFlag()) {
+  for (int i = 0; i < generator.getNumExamplesAct(); i++) {
+    Instance inst = generator.generateExample();
+  }
+} else {
+  Instances data = generator.generateExamples();
+}
+\end{verbatim}
+
+
 %%%%%%%%%%%%%%%%%%%%
 % Randomizing data %
 %%%%%%%%%%%%%%%%%%%%
diff --git a/wekaexamples.zip b/wekaexamples.zip
index 7115868..e148435 100644
Binary files a/wekaexamples.zip and b/wekaexamples.zip differ

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/weka.git



More information about the pkg-java-commits mailing list